@tanstack/table-core 8.5.11 → 8.5.12
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.
- package/build/cjs/core/cell.js +6 -1
- package/build/cjs/core/cell.js.map +1 -1
- package/build/esm/index.js +4 -1
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +17 -17
- package/build/stats-react.json +319 -312
- package/build/umd/index.development.js +4 -1
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/core/cell.ts +16 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/core/column.ts","../../src/core/headers.ts","../../src/features/ColumnSizing.ts","../../src/features/Expanding.ts","../../src/filterFns.ts","../../src/features/Filters.ts","../../src/aggregationFns.ts","../../src/features/Grouping.ts","../../src/features/Ordering.ts","../../src/features/Pagination.ts","../../src/features/Pinning.ts","../../src/features/RowSelection.ts","../../src/sortingFns.ts","../../src/features/Sorting.ts","../../src/features/Visibility.ts","../../src/core/table.ts","../../src/core/cell.ts","../../src/core/row.ts","../../src/utils/filterRowsUtils.ts","../../src/utils/getExpandedRowModel.ts","../../src/columnHelper.ts","../../src/utils/getCoreRowModel.ts","../../src/utils/getFacetedMinMaxValues.ts","../../src/utils/getFacetedRowModel.ts","../../src/utils/getFacetedUniqueValues.ts","../../src/utils/getFilteredRowModel.ts","../../src/utils/getGroupedRowModel.ts","../../src/utils/getPaginationRowModel.ts","../../src/utils/getSortedRowModel.ts"],"sourcesContent":["import { TableState, Updater } from './types'\n\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 extends { [TKey in keyof T]?: any }> = Omit<\n T,\n keyof U\n> &\n U\n\nexport type UnionToIntersection<T> = (\n T extends any ? (x: T) => any : never\n) extends (x: infer R) => any\n ? R\n : never\n\nexport type IsAny<T, Y, N> = 1 extends 0 & T ? Y : N\nexport type IsKnown<T, Y, N> = unknown extends T ? N : Y\n\ntype ComputeRange<\n N extends number,\n Result extends Array<unknown> = []\n> = Result['length'] extends N\n ? Result\n : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray<any>,\n Keys extends number = never\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes<Tail, Keys | Tail['length']>\n : Keys\n\nexport type DeepKeys<T> = unknown extends T\n ? keyof T\n : object extends T\n ? string\n : T extends readonly any[] & IsTuple<T>\n ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>\n : T extends any[]\n ? never & 'Dynamic length array indexing is not supported'\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix<T, keyof T>\n : never\n\ntype DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}`\n : never\n\nexport type DeepValue<T, TProp> = T extends Record<string | number, any>\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue<T[TBranch], TDeepProp>\n : T[TProp & string]\n : never\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport type Getter<TValue> = <TTValue = TValue>() => NoInfer<TTValue>\n\n///\n\nexport function functionalUpdate<T>(updater: Updater<T>, input: T): T {\n return typeof updater === 'function'\n ? (updater as (input: T) => T)(input)\n : updater\n}\n\nexport function noop() {\n //\n}\n\nexport function makeStateUpdater<K extends keyof TableState>(\n key: K,\n instance: unknown\n) {\n return (updater: Updater<TableState[K]>) => {\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\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n }\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug) depTime = Date.now()\n\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 return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug) {\n if (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: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts?.key\n )\n }\n }\n\n return result!\n }\n}\n","import { TaggedTemplateExpression } from '@babel/types'\nimport {\n Column,\n Table,\n AccessorFn,\n ColumnDef,\n ColumnDefTemplate,\n RowData,\n ColumnMeta,\n ColumnDefResolved,\n} from '../types'\nimport { memo } from '../utils'\n\nexport type CoreColumn<TData extends RowData, TValue> = {\n id: string\n depth: number\n accessorFn?: AccessorFn<TData, TValue>\n columnDef: ColumnDef<TData, TValue>\n columns: Column<TData, TValue>[]\n parent?: Column<TData, TValue>\n getFlatColumns: () => Column<TData, TValue>[]\n getLeafColumns: () => Column<TData, TValue>[]\n}\n\nexport function createColumn<TData extends RowData, TValue>(\n table: Table<TData>,\n columnDef: ColumnDef<TData, TValue>,\n depth: number,\n parent?: Column<TData, TValue>\n) {\n const defaultColumn = table._getDefaultColumnDef()\n\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef,\n } as ColumnDefResolved<TData>\n\n const accessorKey = resolvedColumnDef.accessorKey\n\n let id =\n resolvedColumnDef.id ??\n (accessorKey ? accessorKey.replace('.', '_') : undefined) ??\n (typeof resolvedColumnDef.header === 'string'\n ? resolvedColumnDef.header\n : undefined)\n\n let accessorFn: AccessorFn<TData> | undefined\n\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = (originalRow: TData) => {\n let result = originalRow as Record<string, any>\n\n for (const key of accessorKey.split('.')) {\n result = result[key]\n }\n\n return result\n }\n } else {\n accessorFn = (originalRow: TData) =>\n (originalRow as any)[resolvedColumnDef.accessorKey]\n }\n }\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n resolvedColumnDef.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<TData, any> = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent as any,\n depth,\n columnDef: resolvedColumnDef as ColumnDef<TData, any>,\n columns: [],\n getFlatColumns: memo(\n () => [true],\n () => {\n return [\n column as Column<TData, TValue>,\n ...column.columns?.flatMap(d => d.getFlatColumns()),\n ]\n },\n {\n key: process.env.NODE_ENV === 'production' && 'column.getFlatColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n getLeafColumns: memo(\n () => [table._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 [column as Column<TData, TValue>]\n },\n {\n key: process.env.NODE_ENV === 'production' && 'column.getLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n }\n\n column = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.createColumn?.(column, table))\n }, column)\n\n // Yes, we have to convert table to uknown, because we know more than the compiler here.\n return column as Column<TData, TValue>\n}\n","import { RowData, Column, Header, HeaderGroup, Table } from '../types'\nimport { memo } from '../utils'\nimport { TableFeature } from './table'\n\nexport type CoreHeaderGroup<TData extends RowData> = {\n id: string\n depth: number\n headers: Header<TData, unknown>[]\n}\n\nexport type HeaderContext<TData, TValue> = {\n table: Table<TData>\n header: Header<TData, TValue>\n column: Column<TData, TValue>\n}\n\nexport type CoreHeader<TData extends RowData, TValue> = {\n id: string\n index: number\n depth: number\n column: Column<TData, TValue>\n headerGroup: HeaderGroup<TData>\n subHeaders: Header<TData, TValue>[]\n colSpan: number\n rowSpan: number\n getLeafHeaders: () => Header<TData, unknown>[]\n isPlaceholder: boolean\n placeholderId?: string\n getContext: () => HeaderContext<TData, TValue>\n}\n\nexport type HeadersInstance<TData extends RowData> = {\n getHeaderGroups: () => HeaderGroup<TData>[]\n getLeftHeaderGroups: () => HeaderGroup<TData>[]\n getCenterHeaderGroups: () => HeaderGroup<TData>[]\n getRightHeaderGroups: () => HeaderGroup<TData>[]\n\n getFooterGroups: () => HeaderGroup<TData>[]\n getLeftFooterGroups: () => HeaderGroup<TData>[]\n getCenterFooterGroups: () => HeaderGroup<TData>[]\n getRightFooterGroups: () => HeaderGroup<TData>[]\n\n getFlatHeaders: () => Header<TData, unknown>[]\n getLeftFlatHeaders: () => Header<TData, unknown>[]\n getCenterFlatHeaders: () => Header<TData, unknown>[]\n getRightFlatHeaders: () => Header<TData, unknown>[]\n\n getLeafHeaders: () => Header<TData, unknown>[]\n getLeftLeafHeaders: () => Header<TData, unknown>[]\n getCenterLeafHeaders: () => Header<TData, unknown>[]\n getRightLeafHeaders: () => Header<TData, unknown>[]\n}\n\n//\n\nfunction createHeader<TData extends RowData, TValue>(\n table: Table<TData>,\n column: Column<TData, TValue>,\n options: {\n id?: string\n isPlaceholder?: boolean\n placeholderId?: string\n index: number\n depth: number\n }\n) {\n const id = options.id ?? column.id\n\n let header: CoreHeader<TData, TValue> = {\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: (): Header<TData, unknown>[] => {\n const leafHeaders: Header<TData, unknown>[] = []\n\n const recurseHeader = (h: CoreHeader<TData, any>) => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader)\n }\n leafHeaders.push(h as Header<TData, unknown>)\n }\n\n recurseHeader(header)\n\n return leafHeaders\n },\n getContext: () => ({\n table,\n header: header as Header<TData, TValue>,\n column,\n }),\n }\n\n table._features.forEach(feature => {\n Object.assign(header, feature.createHeader?.(header, table))\n })\n\n return header as Header<TData, TValue>\n}\n\nexport const Headers: TableFeature = {\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): HeadersInstance<TData> => {\n return {\n // Header Groups\n\n getHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n const leftColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const rightColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const centerColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n\n const headerGroups = buildHeaderGroups(\n allColumns,\n [...leftColumns, ...centerColumns, ...rightColumns],\n table\n )\n\n return headerGroups\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.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, table, 'center')\n },\n {\n key:\n process.env.NODE_ENV === 'development' && 'getCenterHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n ],\n (allColumns, leafColumns, left) => {\n const orderedLeafColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(\n allColumns,\n orderedLeafColumns,\n table,\n 'left'\n )\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, right) => {\n const orderedLeafColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(\n allColumns,\n orderedLeafColumns,\n table,\n 'right'\n )\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Footer Groups\n\n getFooterGroups: memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftFooterGroups: memo(\n () => [table.getLeftHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterFooterGroups: memo(\n () => [table.getCenterHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key:\n process.env.NODE_ENV === 'development' && 'getCenterFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightFooterGroups: memo(\n () => [table.getRightHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Flat Headers\n\n getFlatHeaders: memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return headerGroups\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftFlatHeaders: memo(\n () => [table.getLeftHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterFlatHeaders: memo(\n () => [table.getCenterHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightFlatHeaders: memo(\n () => [table.getRightHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Leaf Headers\n\n getCenterLeafHeaders: memo(\n () => [table.getCenterFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftLeafHeaders: memo(\n () => [table.getLeftFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightLeafHeaders: memo(\n () => [table.getRightFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeafHeaders: memo(\n () => [\n table.getLeftHeaderGroups(),\n table.getCenterHeaderGroups(),\n table.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 {\n key: process.env.NODE_ENV === 'development' && 'getLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n }\n },\n}\n\nexport function buildHeaderGroups<TData extends RowData>(\n allColumns: Column<TData, unknown>[],\n columnsToGroup: Column<TData, unknown>[],\n table: Table<TData>,\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 = (columns: Column<TData, unknown>[], depth = 1) => {\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<TData>[] = []\n\n const createHeaderGroup = (\n headersToGroup: Header<TData, unknown>[],\n depth: number\n ) => {\n // The header group we are creating\n const headerGroup: HeaderGroup<TData> = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: [],\n }\n\n // The parent columns we're going to scan next\n const pendingParentHeaders: Header<TData, unknown>[] = []\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]\n\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth\n\n let column: Column<TData, unknown>\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 (\n latestPendingParentHeader &&\n latestPendingParentHeader?.column === column\n ) {\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 = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup?.id]\n .filter(Boolean)\n .join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder\n ? `${pendingParentHeaders.filter(d => d.column === column).length}`\n : undefined,\n depth,\n index: pendingParentHeaders.length,\n })\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup)\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header)\n }\n\n headerGroup.headers.push(headerToGroup)\n headerToGroup.headerGroup = headerGroup\n })\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) =>\n createHeader(table, column, {\n depth: maxDepth,\n index,\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, unknown>[]\n ): { colSpan: number; rowSpan: number }[] => {\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\n header.rowSpan = rowSpan\n\n return { colSpan, rowSpan }\n })\n }\n\n recurseHeadersForSpans(headerGroups[0]?.headers ?? [])\n\n return headerGroups\n}\n","import { TableFeature } from '../core/table'\nimport { RowData, Column, Header, OnChangeFn, Table, Updater } from '../types'\nimport { makeStateUpdater } from '../utils'\nimport { ColumnPinningPosition } from './Pinning'\n\n//\n\nexport type ColumnSizingTableState = {\n columnSizing: ColumnSizingState\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = 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 ColumnResizeMode = 'onChange' | 'onEnd'\n\nexport type ColumnSizingOptions = {\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingDefaultOptions = {\n columnResizeMode: ColumnResizeMode\n onColumnSizingChange: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingInstance = {\n setColumnSizing: (updater: Updater<ColumnSizingState>) => void\n setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void\n resetColumnSizing: (defaultState?: boolean) => void\n resetHeaderSizeInfo: (defaultState?: boolean) => void\n getTotalSize: () => number\n getLeftTotalSize: () => number\n getCenterTotalSize: () => number\n getRightTotalSize: () => number\n}\n\nexport type ColumnSizingColumnDef = {\n enableResizing?: boolean\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nexport type ColumnSizingColumn = {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getCanResize: () => boolean\n getIsResizing: () => boolean\n resetSize: () => void\n}\n\nexport type ColumnSizingHeader = {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getResizeHandler: () => (event: unknown) => void\n}\n\n//\n\nexport const defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n}\n\nconst getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n})\n\nexport const ColumnSizing: TableFeature = {\n getDefaultColumnDef: (): ColumnSizingColumnDef => {\n return defaultColumnSizing\n },\n getInitialState: (state): ColumnSizingTableState => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnSizingDefaultOptions => {\n return {\n columnResizeMode: 'onEnd',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): ColumnSizingColumn => {\n return {\n getSize: () => {\n const columnSize = table.getState().columnSizing[column.id]\n\n return Math.min(\n Math.max(\n column.columnDef.minSize ?? defaultColumnSizing.minSize,\n columnSize ?? column.columnDef.size ?? defaultColumnSizing.size\n ),\n column.columnDef.maxSize ?? defaultColumnSizing.maxSize\n )\n },\n getStart: position => {\n const columns = !position\n ? table.getVisibleLeafColumns()\n : position === 'left'\n ? table.getLeftVisibleLeafColumns()\n : table.getRightVisibleLeafColumns()\n\n const index = columns.findIndex(d => d.id === column.id)\n\n if (index > 0) {\n const prevSiblingColumn = columns[index - 1]!\n\n return (\n prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize()\n )\n }\n\n return 0\n },\n resetSize: () => {\n table.setColumnSizing(({ [column.id]: _, ...rest }) => {\n return rest\n })\n },\n getCanResize: () => {\n return (\n (column.columnDef.enableResizing ?? true) &&\n (table.options.enableColumnResizing ?? true)\n )\n },\n getIsResizing: () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id\n },\n }\n },\n\n createHeader: <TData extends RowData, TValue>(\n header: Header<TData, TValue>,\n table: Table<TData>\n ): ColumnSizingHeader => {\n return {\n getSize: () => {\n let sum = 0\n\n const recurse = (header: Header<TData, TValue>) => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse)\n } else {\n sum += header.column.getSize() ?? 0\n }\n }\n\n recurse(header)\n\n return sum\n },\n getStart: () => {\n if (header.index > 0) {\n const prevSiblingHeader =\n header.headerGroup.headers[header.index - 1]!\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()\n }\n\n return 0\n },\n getResizeHandler: () => {\n const column = table.getColumn(header.column.id)\n const canResize = column.getCanResize()\n\n return (e: unknown) => {\n if (!canResize) {\n return\n }\n\n ;(e as any).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 = header.getSize()\n\n const columnSizingStart: [string, number][] = header\n ? header\n .getLeafHeaders()\n .map(d => [d.column.id, d.column.getSize()])\n : [[column.id, column.getSize()]]\n\n const clientX = isTouchStartEvent(e)\n ? Math.round(e.touches[0]!.clientX)\n : (e as MouseEvent).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: ColumnSizingState = {}\n\n table.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, headerSize]) => {\n newColumnSizing[columnId] =\n Math.round(\n Math.max(headerSize + headerSize * deltaPercentage, 0) * 100\n ) / 100\n })\n\n return {\n ...old,\n deltaOffset,\n deltaPercentage,\n }\n })\n\n if (\n table.options.columnResizeMode === 'onChange' ||\n eventType === 'end'\n ) {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing,\n }))\n }\n }\n\n const onMove = (clientXPos?: number) =>\n updateOffset('move', clientXPos)\n\n const onEnd = (clientXPos?: number) => {\n updateOffset('end', clientXPos)\n\n table.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 } 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 table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id,\n }))\n }\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ColumnSizingInstance => {\n return {\n setColumnSizing: updater => table.options.onColumnSizingChange?.(updater),\n setColumnSizingInfo: updater =>\n table.options.onColumnSizingInfoChange?.(updater),\n resetColumnSizing: defaultState => {\n table.setColumnSizing(\n defaultState ? {} : table.initialState.columnSizing ?? {}\n )\n },\n resetHeaderSizeInfo: defaultState => {\n table.setColumnSizingInfo(\n defaultState\n ? getDefaultColumnSizingInfoState()\n : table.initialState.columnSizingInfo ??\n getDefaultColumnSizingInfoState()\n )\n },\n getTotalSize: () =>\n table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getLeftTotalSize: () =>\n table.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getCenterTotalSize: () =>\n table.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getRightTotalSize: () =>\n table.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n }\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(e: unknown): e is TouchEvent {\n return (e as TouchEvent).type === 'touchstart'\n}\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, Row, Updater, RowData } from '../types'\nimport { makeStateUpdater } 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 getToggleExpandedHandler: () => () => void\n}\n\nexport type ExpandedOptions<TData extends RowData> = {\n manualExpanding?: boolean\n onExpandedChange?: OnChangeFn<ExpandedState>\n autoResetExpanded?: boolean\n enableExpanding?: boolean\n getExpandedRowModel?: (table: Table<any>) => () => RowModel<any>\n getIsRowExpanded?: (row: Row<TData>) => boolean\n getRowCanExpand?: (row: Row<TData>) => boolean\n paginateExpandedRows?: boolean\n}\n\nexport type ExpandedInstance<TData extends RowData> = {\n _autoResetExpanded: () => void\n setExpanded: (updater: Updater<ExpandedState>) => void\n toggleAllRowsExpanded: (expanded?: boolean) => void\n resetExpanded: (defaultState?: boolean) => void\n getCanSomeRowsExpand: () => boolean\n getToggleAllRowsExpandedHandler: () => (event: unknown) => void\n getIsSomeRowsExpanded: () => boolean\n getIsAllRowsExpanded: () => boolean\n getExpandedDepth: () => number\n getExpandedRowModel: () => RowModel<TData>\n _getExpandedRowModel?: () => RowModel<TData>\n getPreExpandedRowModel: () => RowModel<TData>\n}\n\n//\n\nexport const Expanding: TableFeature = {\n getInitialState: (state): ExpandedTableState => {\n return {\n expanded: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ExpandedOptions<TData> => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true,\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ExpandedInstance<TData> => {\n let registered = false\n let queued = false\n\n return {\n _autoResetExpanded: () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetExpanded ??\n !table.options.manualExpanding\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetExpanded()\n queued = false\n })\n }\n },\n setExpanded: updater => table.options.onExpandedChange?.(updater),\n toggleAllRowsExpanded: expanded => {\n if (expanded ?? !table.getIsAllRowsExpanded()) {\n table.setExpanded(true)\n } else {\n table.setExpanded({})\n }\n },\n resetExpanded: defaultState => {\n table.setExpanded(\n defaultState ? {} : table.initialState?.expanded ?? {}\n )\n },\n getCanSomeRowsExpand: () => {\n return table.getRowModel().flatRows.some(row => row.getCanExpand())\n },\n getToggleAllRowsExpandedHandler: () => {\n return (e: unknown) => {\n ;(e as any).persist?.()\n table.toggleAllRowsExpanded()\n }\n },\n getIsSomeRowsExpanded: () => {\n const expanded = table.getState().expanded\n return expanded === true || Object.values(expanded).some(Boolean)\n },\n getIsAllRowsExpanded: () => {\n const expanded = table.getState().expanded\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true\n }\n\n if (!Object.keys(expanded).length) {\n return false\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => row.getIsExpanded())) {\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 table.getState().expanded === true\n ? Object.keys(table.getRowModel().rowsById)\n : Object.keys(table.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 getPreExpandedRowModel: () => table.getSortedRowModel(),\n getExpandedRowModel: () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table)\n }\n\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel()\n }\n\n return table._getExpandedRowModel()\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): ExpandedRow => {\n return {\n toggleExpanded: expanded => {\n table.setExpanded(old => {\n const exists = old === true ? true : !!old?.[row.id]\n\n let oldExpanded: ExpandedStateList = {}\n\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).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 [row.id]: true,\n }\n }\n\n if (exists && !expanded) {\n const { [row.id]: _, ...rest } = oldExpanded\n return rest\n }\n\n return old\n })\n },\n getIsExpanded: () => {\n const expanded = table.getState().expanded\n\n return !!(\n table.options.getIsRowExpanded?.(row) ??\n (expanded === true || expanded?.[row.id])\n )\n },\n getCanExpand: () => {\n return (\n table.options.getRowCanExpand?.(row) ??\n ((table.options.enableExpanding ?? true) && !!row.subRows?.length)\n )\n },\n getToggleExpandedHandler: () => {\n const canExpand = row.getCanExpand()\n\n return () => {\n if (!canExpand) return\n row.toggleExpanded()\n }\n },\n }\n },\n}\n","import { FilterFn } from './features/Filters'\n\nconst includesString: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n const search = filterValue.toLowerCase()\n return row.getValue<string>(columnId)?.toLowerCase().includes(search)\n}\n\nincludesString.autoRemove = (val: any) => testFalsey(val)\n\nconst includesStringSensitive: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return row.getValue<string>(columnId)?.includes(filterValue)\n}\n\nincludesStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nconst equalsString: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return (\n row.getValue<string>(columnId)?.toLowerCase() === filterValue.toLowerCase()\n )\n}\n\nequalsString.autoRemove = (val: any) => testFalsey(val)\n\nconst arrIncludes: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue<unknown[]>(columnId)?.includes(filterValue)\n}\n\narrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesAll: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return !filterValue.some(\n val => !row.getValue<unknown[]>(columnId)?.includes(val)\n )\n}\n\narrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesSome: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return filterValue.some(val =>\n row.getValue<unknown[]>(columnId)?.includes(val)\n )\n}\n\narrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {\n return row.getValue(columnId) === filterValue\n}\n\nequals.autoRemove = (val: any) => testFalsey(val)\n\nconst weakEquals: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nweakEquals.autoRemove = (val: any) => testFalsey(val)\n\nconst inNumberRange: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: [number, number]\n) => {\n let [min, max] = filterValue\n\n const rowValue = row.getValue<number>(columnId)\n return rowValue >= min && rowValue <= max\n}\n\ninNumberRange.resolveFilterValue = (val: [any, any]) => {\n let [unsafeMin, unsafeMax] = val\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 [min, max] as const\n}\n\ninNumberRange.autoRemove = (val: any) =>\n testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))\n\n// Export\n\nexport const filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsey(val: any) {\n return val === undefined || val === null || val === ''\n}\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n FilterMeta,\n FilterFns,\n} from '../types'\nimport { functionalUpdate, isFunction, makeStateUpdater } from '../utils'\n\nexport type FiltersTableState = {\n columnFilters: ColumnFiltersState\n globalFilter: any\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport type ColumnFilter = {\n id: string\n value: unknown\n}\n\nexport type ResolvedColumnFilter<TData extends RowData> = {\n id: string\n resolvedValue: unknown\n filterFn: FilterFn<TData>\n}\n\nexport type FilterFn<TData extends RowData> = {\n (\n row: Row<TData>,\n columnId: string,\n filterValue: any,\n addMeta: (meta: FilterMeta) => void\n ): boolean\n\n resolveFilterValue?: TransformFilterValueFn<TData>\n autoRemove?: ColumnFilterAutoRemoveTestFn<TData>\n}\n\nexport type TransformFilterValueFn<TData extends RowData> = (\n value: any,\n column?: Column<TData, unknown>\n) => unknown\n\nexport type ColumnFilterAutoRemoveTestFn<TData extends RowData> = (\n value: any,\n column?: Column<TData, unknown>\n) => boolean\n\nexport type CustomFilterFns<TData extends RowData> = Record<\n string,\n FilterFn<TData>\n>\n\nexport type FilterFnOption<TData extends RowData> =\n | 'auto'\n | BuiltInFilterFn\n | keyof FilterFns\n | FilterFn<TData>\n\nexport type FiltersColumnDef<TData extends RowData> = {\n filterFn?: FilterFnOption<TData>\n enableColumnFilter?: boolean\n enableGlobalFilter?: boolean\n}\n\nexport type FiltersColumn<TData extends RowData> = {\n getAutoFilterFn: () => FilterFn<TData> | undefined\n getFilterFn: () => FilterFn<TData> | undefined\n setFilterValue: (updater: Updater<any>) => void\n getCanFilter: () => boolean\n getCanGlobalFilter: () => boolean\n getFacetedRowModel: () => RowModel<TData>\n _getFacetedRowModel?: () => RowModel<TData>\n getIsFiltered: () => boolean\n getFilterValue: () => unknown\n getFilterIndex: () => number\n getFacetedUniqueValues: () => Map<any, number>\n _getFacetedUniqueValues?: () => Map<any, number>\n getFacetedMinMaxValues: () => undefined | [number, number]\n _getFacetedMinMaxValues?: () => undefined | [number, number]\n}\n\nexport type FiltersRow<TData extends RowData> = {\n columnFilters: Record<string, boolean>\n columnFiltersMeta: Record<string, FilterMeta>\n}\n\nexport type FiltersOptions<TData extends RowData> = {\n enableFilters?: boolean\n manualFiltering?: boolean\n filterFromLeafRows?: boolean\n getFilteredRowModel?: (table: Table<any>) => () => RowModel<any>\n\n // Column\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n enableColumnFilters?: boolean\n\n // Global\n globalFilterFn?: FilterFnOption<TData>\n onGlobalFilterChange?: OnChangeFn<any>\n enableGlobalFilter?: boolean\n getColumnCanGlobalFilter?: (column: Column<TData, unknown>) => boolean\n\n // Faceting\n getFacetedRowModel?: (\n table: Table<TData>,\n columnId: string\n ) => () => RowModel<TData>\n getFacetedUniqueValues?: (\n table: Table<TData>,\n columnId: string\n ) => () => Map<any, number>\n getFacetedMinMaxValues?: (\n table: Table<TData>,\n columnId: string\n ) => () => undefined | [number, number]\n} & (keyof FilterFns extends never\n ? {\n filterFns?: Record<string, FilterFn<any>>\n }\n : {\n filterFns: Record<keyof FilterFns, FilterFn<any>>\n })\n\nexport type FiltersInstance<TData extends RowData> = {\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => void\n\n resetColumnFilters: (defaultState?: boolean) => void\n\n // Column Filters\n getPreFilteredRowModel: () => RowModel<TData>\n getFilteredRowModel: () => RowModel<TData>\n _getFilteredRowModel?: () => RowModel<TData>\n\n // Global Filters\n setGlobalFilter: (updater: Updater<any>) => void\n resetGlobalFilter: (defaultState?: boolean) => void\n getGlobalAutoFilterFn: () => FilterFn<TData> | undefined\n getGlobalFilterFn: () => FilterFn<TData> | undefined\n getGlobalFacetedRowModel: () => RowModel<TData>\n _getGlobalFacetedRowModel?: () => RowModel<TData>\n getGlobalFacetedUniqueValues: () => Map<any, number>\n _getGlobalFacetedUniqueValues?: () => Map<any, number>\n getGlobalFacetedMinMaxValues: () => undefined | [number, number]\n _getGlobalFacetedMinMaxValues?: () => undefined | [number, number]\n}\n\n//\n\nexport const Filters: TableFeature = {\n getDefaultColumnDef: <TData extends RowData>(): FiltersColumnDef<TData> => {\n return {\n filterFn: 'auto',\n }\n },\n\n getInitialState: (state): FiltersTableState => {\n return {\n columnFilters: [],\n globalFilter: undefined,\n // filtersProgress: 1,\n // facetProgress: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): FiltersOptions<TData> => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n filterFromLeafRows: false,\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n const value = table\n .getCoreRowModel()\n .flatRows[0]?._getAllCellsByColumnId()\n [column.id]?.getValue()\n\n return typeof value === 'string' || typeof value === 'number'\n },\n }\n },\n\n createColumn: <TData extends RowData>(\n column: Column<TData, unknown>,\n table: Table<TData>\n ): FiltersColumn<TData> => {\n return {\n getAutoFilterFn: () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = 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 (typeof value === 'boolean') {\n return filterFns.equals\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 return isFunction(column.columnDef.filterFn)\n ? column.columnDef.filterFn\n : column.columnDef.filterFn === 'auto'\n ? column.getAutoFilterFn()\n : table.options.filterFns?.[column.columnDef.filterFn as string] ??\n filterFns[column.columnDef.filterFn as BuiltInFilterFn]\n },\n getCanFilter: () => {\n return (\n (column.columnDef.enableColumnFilter ?? true) &&\n (table.options.enableColumnFilters ?? true) &&\n (table.options.enableFilters ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanGlobalFilter: () => {\n return (\n (column.columnDef.enableGlobalFilter ?? true) &&\n (table.options.enableGlobalFilter ?? true) &&\n (table.options.enableFilters ?? true) &&\n (table.options.getColumnCanGlobalFilter?.(column) ?? true) &&\n !!column.accessorFn\n )\n },\n\n getIsFiltered: () => column.getFilterIndex() > -1,\n\n getFilterValue: () =>\n table.getState().columnFilters?.find(d => d.id === column.id)?.value,\n\n getFilterIndex: () =>\n table.getState().columnFilters?.findIndex(d => d.id === column.id) ??\n -1,\n\n setFilterValue: value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn()\n const previousfilter = old?.find(d => d.id === column.id)\n\n const newFilter = functionalUpdate(\n value,\n previousfilter ? previousfilter.value : undefined\n )\n\n //\n if (\n shouldAutoRemoveFilter(\n filterFn as FilterFn<TData>,\n newFilter,\n column\n )\n ) {\n return old?.filter(d => d.id !== column.id) ?? []\n }\n\n const newFilterObj = { id: column.id, value: newFilter }\n\n if (previousfilter) {\n return (\n old?.map(d => {\n if (d.id === column.id) {\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 _getFacetedRowModel:\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, column.id),\n getFacetedRowModel: () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return column._getFacetedRowModel()\n },\n _getFacetedUniqueValues:\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, column.id),\n getFacetedUniqueValues: () => {\n if (!column._getFacetedUniqueValues) {\n return new Map()\n }\n\n return column._getFacetedUniqueValues()\n },\n _getFacetedMinMaxValues:\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, column.id),\n getFacetedMinMaxValues: () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined\n }\n\n return column._getFacetedMinMaxValues()\n },\n // () => [column.getFacetedRowModel()],\n // facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): FiltersRow<TData> => {\n return {\n columnFilters: {},\n columnFiltersMeta: {},\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): FiltersInstance<TData> => {\n return {\n getGlobalAutoFilterFn: () => {\n return filterFns.includesString\n },\n\n getGlobalFilterFn: () => {\n const { globalFilterFn: globalFilterFn } = table.options\n\n return isFunction(globalFilterFn)\n ? globalFilterFn\n : globalFilterFn === 'auto'\n ? table.getGlobalAutoFilterFn()\n : table.options.filterFns?.[globalFilterFn as string] ??\n filterFns[globalFilterFn as BuiltInFilterFn]\n },\n\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => {\n const leafColumns = table.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 = column.getFilterFn()\n\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false\n }\n }\n\n return true\n })\n }\n\n table.options.onColumnFiltersChange?.(updateFn)\n },\n\n setGlobalFilter: updater => {\n table.options.onGlobalFilterChange?.(updater)\n },\n\n resetGlobalFilter: defaultState => {\n table.setGlobalFilter(\n defaultState ? undefined : table.initialState.globalFilter\n )\n },\n\n resetColumnFilters: defaultState => {\n table.setColumnFilters(\n defaultState ? [] : table.initialState?.columnFilters ?? []\n )\n },\n\n getPreFilteredRowModel: () => table.getCoreRowModel(),\n getFilteredRowModel: () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table)\n }\n\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getFilteredRowModel()\n },\n\n _getGlobalFacetedRowModel:\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, '__global__'),\n\n getGlobalFacetedRowModel: () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getGlobalFacetedRowModel()\n },\n\n _getGlobalFacetedUniqueValues:\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, '__global__'),\n getGlobalFacetedUniqueValues: () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map()\n }\n\n return table._getGlobalFacetedUniqueValues()\n },\n\n _getGlobalFacetedMinMaxValues:\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, '__global__'),\n getGlobalFacetedMinMaxValues: () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return\n }\n\n return table._getGlobalFacetedMinMaxValues()\n },\n }\n },\n}\n\nexport function shouldAutoRemoveFilter<TData extends RowData>(\n filterFn?: FilterFn<TData>,\n value?: any,\n column?: Column<TData, unknown>\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 { AggregationFn } from './features/Grouping'\n\nconst sum: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId)\n return sum + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\nconst min: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n\n if (\n value != null &&\n (min! > value || (min === undefined && value >= value))\n ) {\n min = value\n }\n })\n\n return min\n}\n\nconst max: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n if (\n value != null &&\n (max! < value || (max === undefined && value >= value))\n ) {\n max = value\n }\n })\n\n return max\n}\n\nconst extent: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\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\nconst mean: AggregationFn<any> = (columnId, leafRows) => {\n let count = 0\n let sum = 0\n\n leafRows.forEach(row => {\n let value = row.getValue<number>(columnId)\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\nconst median: AggregationFn<any> = (columnId, leafRows) => {\n if (!leafRows.length) {\n return\n }\n\n let min = 0\n let max = 0\n\n leafRows.forEach(row => {\n let value = row.getValue(columnId)\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\nconst unique: AggregationFn<any> = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values())\n}\n\nconst uniqueCount: AggregationFn<any> = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size\n}\n\nconst count: AggregationFn<any> = (_columnId, leafRows) => {\n return leafRows.length\n}\n\nexport const aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n","import { RowModel } from '..'\nimport { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'\nimport { TableFeature } from '../core/table'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n ColumnDefTemplate,\n RowData,\n AggregationFns,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type GroupingState = string[]\n\nexport type GroupingTableState = {\n grouping: GroupingState\n}\n\nexport type AggregationFn<TData extends RowData> = (\n columnId: string,\n leafRows: Row<TData>[],\n childRows: Row<TData>[]\n) => any\n\nexport type CustomAggregationFns = Record<string, AggregationFn<any>>\n\nexport type AggregationFnOption<TData extends RowData> =\n | 'auto'\n | keyof AggregationFns\n | BuiltInAggregationFn\n | AggregationFn<TData>\n\nexport type GroupingColumnDef<TData extends RowData, TValue> = {\n aggregationFn?: AggregationFnOption<TData>\n aggregatedCell?: ColumnDefTemplate<\n ReturnType<Cell<TData, TValue>['getContext']>\n >\n enableGrouping?: boolean\n}\n\nexport type GroupingColumn<TData extends RowData> = {\n getCanGroup: () => boolean\n getIsGrouped: () => boolean\n getGroupedIndex: () => number\n toggleGrouping: () => void\n getToggleGroupingHandler: () => () => void\n getAutoAggregationFn: () => AggregationFn<TData> | undefined\n getAggregationFn: () => AggregationFn<TData> | undefined\n}\n\nexport type GroupingRow = {\n groupingColumnId?: string\n groupingValue?: unknown\n getIsGrouped: () => boolean\n _groupingValuesCache: Record<string, any>\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 enableGrouping: boolean\n}\n\nexport type GroupingOptions = {\n manualGrouping?: boolean\n onGroupingChange?: OnChangeFn<GroupingState>\n enableGrouping?: boolean\n getGroupedRowModel?: (table: Table<any>) => () => RowModel<any>\n groupedColumnMode?: false | 'reorder' | 'remove'\n} & (keyof AggregationFns extends never\n ? {\n aggregationFns?: Record<string, AggregationFn<any>>\n }\n : {\n aggregationFns: Record<keyof AggregationFns, AggregationFn<any>>\n })\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport type GroupingInstance<TData extends RowData> = {\n setGrouping: (updater: Updater<GroupingState>) => void\n resetGrouping: (defaultState?: boolean) => void\n getPreGroupedRowModel: () => RowModel<TData>\n getGroupedRowModel: () => RowModel<TData>\n _getGroupedRowModel?: () => RowModel<TData>\n}\n\n//\n\nexport const Grouping: TableFeature = {\n getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<\n TData,\n unknown\n > => {\n return {\n aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,\n aggregationFn: 'auto',\n }\n },\n\n getInitialState: (state): GroupingTableState => {\n return {\n grouping: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): GroupingOptions => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder',\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): GroupingColumn<TData> => {\n return {\n toggleGrouping: () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old?.includes(column.id)) {\n return old.filter(d => d !== column.id)\n }\n\n return [...(old ?? []), column.id]\n })\n },\n\n getCanGroup: () => {\n return (\n column.columnDef.enableGrouping ??\n true ??\n table.options.enableGrouping ??\n true ??\n !!column.accessorFn\n )\n },\n\n getIsGrouped: () => {\n return table.getState().grouping?.includes(column.id)\n },\n\n getGroupedIndex: () => table.getState().grouping?.indexOf(column.id),\n\n getToggleGroupingHandler: () => {\n const canGroup = column.getCanGroup()\n\n return () => {\n if (!canGroup) return\n column.toggleGrouping()\n }\n },\n getAutoAggregationFn: () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = 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 getAggregationFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.aggregationFn)\n ? column.columnDef.aggregationFn\n : column.columnDef.aggregationFn === 'auto'\n ? column.getAutoAggregationFn()\n : table.options.aggregationFns?.[\n column.columnDef.aggregationFn as string\n ] ??\n aggregationFns[\n column.columnDef.aggregationFn as BuiltInAggregationFn\n ]\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): GroupingInstance<TData> => {\n return {\n setGrouping: updater => table.options.onGroupingChange?.(updater),\n\n resetGrouping: defaultState => {\n table.setGrouping(\n defaultState ? [] : table.initialState?.grouping ?? []\n )\n },\n\n getPreGroupedRowModel: () => table.getFilteredRowModel(),\n getGroupedRowModel: () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table)\n }\n\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel()\n }\n\n return table._getGroupedRowModel()\n },\n }\n },\n\n createRow: <TData extends RowData>(row: Row<TData>): GroupingRow => {\n return {\n getIsGrouped: () => !!row.groupingColumnId,\n _groupingValuesCache: {},\n }\n },\n\n createCell: <TData extends RowData, TValue>(\n cell: Cell<TData, TValue>,\n column: Column<TData, TValue>,\n row: Row<TData>,\n table: Table<TData>\n ): GroupingCell => {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\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,\n }\n },\n}\n\nexport function orderColumns<TData extends RowData>(\n leafColumns: Column<TData, unknown>[],\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 { makeStateUpdater, memo } from '../utils'\n\nimport { Table, OnChangeFn, Updater, Column, RowData } from '../types'\n\nimport { Grouping, orderColumns } from './Grouping'\nimport { TableFeature } from '../core/table'\n\nexport type ColumnOrderTableState = {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport type ColumnOrderOptions = {\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport type ColumnOrderDefaultOptions = {\n onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport type ColumnOrderInstance<TData extends RowData> = {\n setColumnOrder: (updater: Updater<ColumnOrderState>) => void\n resetColumnOrder: (defaultState?: boolean) => void\n _getOrderColumnsFn: () => (\n columns: Column<TData, unknown>[]\n ) => Column<TData, unknown>[]\n}\n\n//\n\nexport const Ordering: TableFeature = {\n getInitialState: (state): ColumnOrderTableState => {\n return {\n columnOrder: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnOrderDefaultOptions => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ColumnOrderInstance<TData> => {\n return {\n setColumnOrder: updater => table.options.onColumnOrderChange?.(updater),\n resetColumnOrder: defaultState => {\n table.setColumnOrder(\n defaultState ? [] : table.initialState.columnOrder ?? []\n )\n },\n _getOrderColumnsFn: memo(\n () => [\n table.getState().columnOrder,\n table.getState().grouping,\n table.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<TData, unknown>[] = []\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 orderColumns(orderedColumns, grouping, groupedColumnMode)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getOrderColumnsFn',\n // debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, RowModel, Updater, RowData } from '../types'\nimport { functionalUpdate, makeStateUpdater, memo } from '../utils'\n\nexport type PaginationState = {\n pageIndex: number\n pageSize: number\n}\n\nexport type PaginationTableState = {\n pagination: PaginationState\n}\n\nexport type PaginationInitialTableState = {\n pagination?: Partial<PaginationState>\n}\n\nexport type PaginationOptions = {\n pageCount?: number\n manualPagination?: boolean\n onPaginationChange?: OnChangeFn<PaginationState>\n autoResetPageIndex?: boolean\n getPaginationRowModel?: (table: Table<any>) => () => RowModel<any>\n}\n\nexport type PaginationDefaultOptions = {\n onPaginationChange: OnChangeFn<PaginationState>\n}\n\nexport type PaginationInstance<TData extends RowData> = {\n _autoResetPageIndex: () => void\n setPagination: (updater: Updater<PaginationState>) => void\n resetPagination: (defaultState?: boolean) => void\n setPageIndex: (updater: Updater<number>) => void\n resetPageIndex: (defaultState?: boolean) => void\n setPageSize: (updater: Updater<number>) => void\n resetPageSize: (defaultState?: boolean) => void\n setPageCount: (updater: Updater<number>) => void\n getPageOptions: () => number[]\n getCanPreviousPage: () => boolean\n getCanNextPage: () => boolean\n previousPage: () => void\n nextPage: () => void\n getPrePaginationRowModel: () => RowModel<TData>\n getPaginationRowModel: () => RowModel<TData>\n _getPaginationRowModel?: () => RowModel<TData>\n getPageCount: () => number\n}\n\n//\n\nconst defaultPageIndex = 0\nconst defaultPageSize = 10\n\nconst getDefaultPaginationState = (): PaginationState => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize,\n})\n\nexport const Pagination: TableFeature = {\n getInitialState: (state): PaginationTableState => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...state?.pagination,\n },\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): PaginationDefaultOptions => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): PaginationInstance<TData> => {\n let registered = false\n let queued = false\n\n return {\n _autoResetPageIndex: () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetPageIndex ??\n !table.options.manualPagination\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetPageIndex()\n queued = false\n })\n }\n },\n setPagination: updater => {\n const safeUpdater: Updater<PaginationState> = old => {\n let newState = functionalUpdate(updater, old)\n\n return newState\n }\n\n return table.options.onPaginationChange?.(safeUpdater)\n },\n resetPagination: defaultState => {\n table.setPagination(\n defaultState\n ? getDefaultPaginationState()\n : table.initialState.pagination ?? getDefaultPaginationState()\n )\n },\n setPageIndex: updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex)\n\n const maxPageIndex =\n typeof table.options.pageCount === 'undefined' ||\n table.options.pageCount === -1\n ? Number.MAX_SAFE_INTEGER\n : table.options.pageCount - 1\n\n pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex)\n\n return {\n ...old,\n pageIndex,\n }\n })\n },\n resetPageIndex: defaultState => {\n table.setPageIndex(\n defaultState\n ? defaultPageIndex\n : table.initialState?.pagination?.pageIndex ?? defaultPageIndex\n )\n },\n resetPageSize: defaultState => {\n table.setPageSize(\n defaultState\n ? defaultPageSize\n : table.initialState?.pagination?.pageSize ?? defaultPageSize\n )\n },\n setPageSize: updater => {\n table.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 table.setPagination(old => {\n let newPageCount = functionalUpdate(\n updater,\n table.options.pageCount ?? -1\n )\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 () => [table.getPageCount()],\n 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: process.env.NODE_ENV === 'development' && 'getPageOptions',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getCanPreviousPage: () => table.getState().pagination.pageIndex > 0,\n\n getCanNextPage: () => {\n const { pageIndex } = table.getState().pagination\n\n const pageCount = table.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\n previousPage: () => {\n return table.setPageIndex(old => old - 1)\n },\n\n nextPage: () => {\n return table.setPageIndex(old => {\n return old + 1\n })\n },\n\n getPrePaginationRowModel: () => table.getExpandedRowModel(),\n getPaginationRowModel: () => {\n if (\n !table._getPaginationRowModel &&\n table.options.getPaginationRowModel\n ) {\n table._getPaginationRowModel =\n table.options.getPaginationRowModel(table)\n }\n\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel()\n }\n\n return table._getPaginationRowModel()\n },\n\n getPageCount: () => {\n return (\n table.options.pageCount ??\n Math.ceil(\n table.getPrePaginationRowModel().rows.length /\n table.getState().pagination.pageSize\n )\n )\n },\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport {\n OnChangeFn,\n Updater,\n Table,\n Column,\n Row,\n Cell,\n RowData,\n} from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type 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}\n\nexport type ColumnPinningColumn = {\n getCanPin: () => boolean\n getPinnedIndex: () => number\n getIsPinned: () => ColumnPinningPosition\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport type ColumnPinningRow<TData extends RowData> = {\n getLeftVisibleCells: () => Cell<TData, unknown>[]\n getCenterVisibleCells: () => Cell<TData, unknown>[]\n getRightVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport type ColumnPinningInstance<TData extends RowData> = {\n setColumnPinning: (updater: Updater<ColumnPinningState>) => void\n resetColumnPinning: (defaultState?: boolean) => void\n getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean\n getLeftLeafColumns: () => Column<TData, unknown>[]\n getRightLeafColumns: () => Column<TData, unknown>[]\n getCenterLeafColumns: () => Column<TData, unknown>[]\n}\n\n//\n\nconst getDefaultPinningState = (): ColumnPinningState => ({\n left: [],\n right: [],\n})\n\nexport const Pinning: TableFeature = {\n getInitialState: (state): ColumnPinningTableState => {\n return {\n columnPinning: getDefaultPinningState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnPinningDefaultOptions => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): ColumnPinningColumn => {\n return {\n pin: position => {\n const columnIds = column\n .getLeafColumns()\n .map(d => d.id)\n .filter(Boolean) as string[]\n\n table.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 getCanPin: () => {\n const leafColumns = column.getLeafColumns()\n\n return leafColumns.some(\n d =>\n (d.columnDef.enablePinning ?? true) &&\n (table.options.enablePinning ?? true)\n )\n },\n\n getIsPinned: () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id)\n\n const { left, right } = table.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 getPinnedIndex: () => {\n const position = column.getIsPinned()\n\n return position\n ? table.getState().columnPinning?.[position]?.indexOf(column.id) ?? -1\n : 0\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): ColumnPinningRow<TData> => {\n return {\n getCenterVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allCells, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allCells.filter(d => !leftAndRight.includes(d.column.id))\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'row.getCenterVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getLeftVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n ,\n ],\n (allCells, left) => {\n const cells = (left ?? [])\n .map(\n columnId => allCells.find(cell => cell.column.id === columnId)!\n )\n .filter(Boolean)\n .map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))\n\n return cells\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getLeftVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getRightVisibleCells: memo(\n () => [row._getAllVisibleCells(), table.getState().columnPinning.right],\n (allCells, right) => {\n const cells = (right ?? [])\n .map(\n columnId => allCells.find(cell => cell.column.id === columnId)!\n )\n .filter(Boolean)\n .map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))\n\n return cells\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getRightVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ColumnPinningInstance<TData> => {\n return {\n setColumnPinning: updater =>\n table.options.onColumnPinningChange?.(updater),\n\n resetColumnPinning: defaultState =>\n table.setColumnPinning(\n defaultState\n ? getDefaultPinningState()\n : table.initialState?.columnPinning ?? getDefaultPinningState()\n ),\n\n getIsSomeColumnsPinned: position => {\n const pinningState = table.getState().columnPinning\n\n if (!position) {\n return Boolean(\n pinningState.left?.length || pinningState.right?.length\n )\n }\n return Boolean(pinningState[position]?.length)\n },\n\n getLeftLeafColumns: memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.left],\n (allColumns, left) => {\n return (left ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getRightLeafColumns: memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.right],\n (allColumns, right) => {\n return (right ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getCenterLeafColumns: memo(\n () => [\n table.getAllLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allColumns.filter(d => !leftAndRight.includes(d.id))\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, Row, RowModel, Updater, RowData } from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type RowSelectionState = Record<string, boolean>\n\nexport type RowSelectionTableState = {\n rowSelection: RowSelectionState\n}\n\nexport type RowSelectionOptions<TData extends RowData> = {\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean)\n enableMultiRowSelection?: boolean | ((row: Row<TData>) => boolean)\n enableSubRowSelection?: boolean | ((row: Row<TData>) => boolean)\n onRowSelectionChange?: OnChangeFn<RowSelectionState>\n // enableGroupingRowSelection?:\n // | boolean\n // | ((\n // row: Row<TData>\n // ) => boolean)\n // isAdditiveSelectEvent?: (e: unknown) => boolean\n // isInclusiveSelectEvent?: (e: unknown) => boolean\n // selectRowsFn?: (\n // table: Table<TData>,\n // rowModel: RowModel<TData>\n // ) => RowModel<TData>\n}\n\nexport type RowSelectionRow = {\n getIsSelected: () => boolean\n getIsSomeSelected: () => boolean\n getIsAllSubRowsSelected: () => boolean\n getCanSelect: () => boolean\n getCanMultiSelect: () => boolean\n getCanSelectSubRows: () => boolean\n toggleSelected: (value?: boolean) => void\n getToggleSelectedHandler: () => (event: unknown) => void\n}\n\nexport type RowSelectionInstance<TData extends RowData> = {\n getToggleAllRowsSelectedHandler: () => (event: unknown) => void\n getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void\n setRowSelection: (updater: Updater<RowSelectionState>) => void\n resetRowSelection: (defaultState?: boolean) => void\n getIsAllRowsSelected: () => boolean\n getIsAllPageRowsSelected: () => boolean\n getIsSomeRowsSelected: () => boolean\n getIsSomePageRowsSelected: () => boolean\n toggleAllRowsSelected: (value?: boolean) => void\n toggleAllPageRowsSelected: (value?: boolean) => void\n getPreSelectedRowModel: () => RowModel<TData>\n getSelectedRowModel: () => RowModel<TData>\n getFilteredSelectedRowModel: () => RowModel<TData>\n getGroupedSelectedRowModel: () => RowModel<TData>\n}\n\n//\n\nexport const RowSelection: TableFeature = {\n getInitialState: (state): RowSelectionTableState => {\n return {\n rowSelection: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): RowSelectionOptions<TData> => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): RowSelectionInstance<TData> => {\n return {\n setRowSelection: updater => table.options.onRowSelectionChange?.(updater),\n resetRowSelection: defaultState =>\n table.setRowSelection(\n defaultState ? {} : table.initialState.rowSelection ?? {}\n ),\n toggleAllRowsSelected: value => {\n table.setRowSelection(old => {\n value =\n typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected()\n\n const rowSelection = { ...old }\n\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows\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 if (!row.getCanSelect()) {\n return\n }\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 table.setRowSelection(old => {\n const resolvedValue =\n typeof value !== 'undefined'\n ? value\n : !table.getIsAllPageRowsSelected()\n\n const rowSelection: RowSelectionState = { ...old }\n\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, table)\n })\n\n return rowSelection\n }),\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\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 // table.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 // table.setRowSelection(selectedRowIds)\n // },\n getPreSelectedRowModel: () => table.getCoreRowModel(),\n getSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getCoreRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getFilteredSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getFilteredRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'getFilteredSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getGroupedSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getSortedRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'getGroupedSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n getIsAllRowsSelected: () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows\n const { rowSelection } = table.getState()\n\n let isAllRowsSelected = Boolean(\n preGroupedFlatRows.length && Object.keys(rowSelection).length\n )\n\n if (isAllRowsSelected) {\n if (\n preGroupedFlatRows.some(\n row => row.getCanSelect() && !rowSelection[row.id]\n )\n ) {\n isAllRowsSelected = false\n }\n }\n\n return isAllRowsSelected\n },\n\n getIsAllPageRowsSelected: () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n const { rowSelection } = table.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 const totalSelected = Object.keys(\n table.getState().rowSelection ?? {}\n ).length\n return (\n totalSelected > 0 &&\n totalSelected < table.getFilteredRowModel().flatRows.length\n )\n },\n\n getIsSomePageRowsSelected: () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n return table.getIsAllPageRowsSelected()\n ? false\n : paginationFlatRows.some(\n d => d.getIsSelected() || d.getIsSomeSelected()\n )\n },\n\n getToggleAllRowsSelectedHandler: () => {\n return (e: unknown) => {\n table.toggleAllRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n\n getToggleAllPageRowsSelectedHandler: () => {\n return (e: unknown) => {\n table.toggleAllPageRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): RowSelectionRow => {\n return {\n toggleSelected: value => {\n const isSelected = row.getIsSelected()\n\n table.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, table)\n\n return selectedRowIds\n })\n },\n getIsSelected: () => {\n const { rowSelection } = table.getState()\n return isRowSelected(row, rowSelection)\n },\n\n getIsSomeSelected: () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'some'\n },\n\n getIsAllSubRowsSelected: () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'all'\n },\n\n getCanSelect: () => {\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row)\n }\n\n return table.options.enableRowSelection ?? true\n },\n\n getCanSelectSubRows: () => {\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row)\n }\n\n return table.options.enableSubRowSelection ?? true\n },\n\n getCanMultiSelect: () => {\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row)\n }\n\n return table.options.enableMultiRowSelection ?? true\n },\n getToggleSelectedHandler: () => {\n const canSelect = row.getCanSelect()\n\n return (e: unknown) => {\n if (!canSelect) return\n row.toggleSelected(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n },\n }\n },\n}\n\nconst mutateRowIsSelected = <TData extends RowData>(\n selectedRowIds: Record<string, boolean>,\n id: string,\n value: boolean,\n table: Table<TData>\n) => {\n const row = table.getRow(id)\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key])\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true\n }\n } else {\n delete selectedRowIds[id]\n }\n // }\n\n if (row.subRows?.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row =>\n mutateRowIsSelected(selectedRowIds, row.id, value, table)\n )\n }\n}\n\nexport function selectRowsFn<TData extends RowData>(\n table: Table<TData>,\n rowModel: RowModel<TData>\n): RowModel<TData> {\n const rowSelection = table.getState().rowSelection\n\n const newSelectedFlatRows: Row<TData>[] = []\n const newSelectedRowsById: Record<string, Row<TData>> = {}\n\n // Filters top level and nested rows\n const recurseRows = (rows: Row<TData>[], depth = 0): Row<TData>[] => {\n return rows\n .map(row => {\n const isSelected = isRowSelected(row, rowSelection)\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<TData>[]\n }\n\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById,\n }\n}\n\nexport function isRowSelected<TData extends RowData>(\n row: Row<TData>,\n selection: Record<string, boolean>\n): boolean {\n return selection[row.id] ?? false\n}\n\nexport function isSubRowSelected<TData extends RowData>(\n row: Row<TData>,\n selection: Record<string, boolean>,\n table: Table<TData>\n): boolean | 'some' | 'all' {\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)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false\n }\n\n return false\n}\n","import { SortingFn } from './features/Sorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\nconst alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\nconst datetime: SortingFn<any> = (rowA, rowB, columnId) => {\n const a = rowA.getValue<Date>(columnId)\n const b = rowB.getValue<Date>(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nconst basic: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(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\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// Exports\n\nexport const sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic,\n}\n\nexport type BuiltInSortingFn = keyof typeof sortingFns\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n SortingFns,\n} from '../types'\n\nimport { isFunction, makeStateUpdater } 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 SortingTableState = {\n sorting: SortingState\n}\n\nexport type SortingFn<TData extends RowData> = {\n (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number\n}\n\nexport type CustomSortingFns<TData extends RowData> = Record<\n string,\n SortingFn<TData>\n>\n\nexport type SortingFnOption<TData extends RowData> =\n | 'auto'\n | keyof SortingFns\n | BuiltInSortingFn\n | SortingFn<TData>\n\nexport type SortingColumnDef<TData extends RowData> = {\n sortingFn?: SortingFnOption<TData>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<TData extends RowData> = {\n getAutoSortingFn: () => SortingFn<TData>\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn<TData>\n getFirstSortDir: () => SortDirection\n getNextSortingOrder: () => SortDirection | false\n getCanSort: () => boolean\n getCanMultiSort: () => boolean\n getSortIndex: () => number\n getIsSorted: () => false | SortDirection\n clearSorting: () => void\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n}\n\nexport type SortingOptions<TData extends RowData> = {\n manualSorting?: boolean\n onSortingChange?: OnChangeFn<SortingState>\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (table: Table<any>) => () => RowModel<any>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n} & (keyof SortingFns extends never\n ? {\n sortingFns?: Record<string, SortingFn<any>>\n }\n : {\n sortingFns: Record<keyof SortingFns, SortingFn<any>>\n })\n\nexport type SortingInstance<TData extends RowData> = {\n setSorting: (updater: Updater<SortingState>) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel<TData>\n getSortedRowModel: () => RowModel<TData>\n _getSortedRowModel?: () => RowModel<TData>\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <TData extends RowData>(): SortingColumnDef<TData> => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): SortingOptions<TData> => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): SortingColumn<TData> => {\n return {\n getAutoSortingFn: () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = 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 = table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n },\n getSortingFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.sortingFn)\n ? column.columnDef.sortingFn\n : column.columnDef.sortingFn === 'auto'\n ? column.getAutoSortingFn()\n : table.options.sortingFns?.[column.columnDef.sortingFn as string] ??\n sortingFns[column.columnDef.sortingFn as BuiltInSortingFn]\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder()\n const hasManualValue = typeof desc !== 'undefined' && desc !== null\n\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === column.id)\n const existingIndex = old?.findIndex(d => d.id === column.id)\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old?.length && 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 // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove'\n }\n }\n }\n\n if (sortAction === 'add') {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id)\n } else {\n newSorting = [\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n }\n\n return newSorting\n })\n },\n\n getFirstSortDir: () => {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n table.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n },\n\n getNextSortingOrder: (multi?: boolean) => {\n const firstSortDirection = column.getFirstSortDir()\n const isSorted = column.getIsSorted()\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false\n }\n return isSorted === 'desc' ? 'asc' : 'desc'\n },\n\n getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n table.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = table\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n table.setSorting(old =>\n old?.length ? old.filter(d => d.id !== column.id) : []\n )\n },\n\n getToggleSortingHandler: () => {\n const canSort = column.getCanSort()\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort()\n ? table.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): SortingInstance<TData> => {\n return {\n setSorting: updater => table.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n },\n getPreSortedRowModel: () => table.getGroupedRowModel(),\n getSortedRowModel: () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table)\n }\n\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel()\n }\n\n return table._getSortedRowModel()\n },\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Updater,\n Row,\n RowData,\n} from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type VisibilityState = Record<string, boolean>\n\nexport type VisibilityTableState = {\n columnVisibility: VisibilityState\n}\n\nexport type VisibilityOptions = {\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n enableHiding?: boolean\n}\n\nexport type VisibilityDefaultOptions = {\n onColumnVisibilityChange: OnChangeFn<VisibilityState>\n}\n\nexport type VisibilityInstance<TData extends RowData> = {\n getVisibleFlatColumns: () => Column<TData, unknown>[]\n getVisibleLeafColumns: () => Column<TData, unknown>[]\n getLeftVisibleLeafColumns: () => Column<TData, unknown>[]\n getRightVisibleLeafColumns: () => Column<TData, unknown>[]\n getCenterVisibleLeafColumns: () => Column<TData, unknown>[]\n setColumnVisibility: (updater: Updater<VisibilityState>) => void\n resetColumnVisibility: (defaultState?: boolean) => void\n toggleAllColumnsVisible: (value?: boolean) => void\n getIsAllColumnsVisible: () => boolean\n getIsSomeColumnsVisible: () => boolean\n getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void\n}\n\nexport type VisibilityColumnDef = {\n enableHiding?: boolean\n}\n\nexport type VisibilityRow<TData extends RowData> = {\n _getAllVisibleCells: () => Cell<TData, unknown>[]\n getVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport type VisibilityColumn = {\n getCanHide: () => boolean\n getIsVisible: () => boolean\n toggleVisibility: (value?: boolean) => void\n getToggleVisibilityHandler: () => (event: unknown) => void\n}\n\n//\n\nexport const Visibility: TableFeature = {\n getInitialState: (state): VisibilityTableState => {\n return {\n columnVisibility: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): VisibilityDefaultOptions => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): VisibilityColumn => {\n return {\n toggleVisibility: value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value ?? !column.getIsVisible(),\n }))\n }\n },\n getIsVisible: () => {\n return table.getState().columnVisibility?.[column.id] ?? true\n },\n\n getCanHide: () => {\n return (\n (column.columnDef.enableHiding ?? true) &&\n (table.options.enableHiding ?? true)\n )\n },\n getToggleVisibilityHandler: () => {\n return (e: unknown) => {\n column.toggleVisibility?.(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): VisibilityRow<TData> => {\n return {\n _getAllVisibleCells: memo(\n () => [row.getAllCells(), table.getState().columnVisibility],\n cells => {\n return cells.filter(cell => cell.column.getIsVisible())\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getVisibleCells: memo(\n () => [\n row.getLeftVisibleCells(),\n row.getCenterVisibleCells(),\n row.getRightVisibleCells(),\n ],\n (left, center, right) => [...left, ...center, ...right],\n {\n key: process.env.NODE_ENV === 'development' && 'row.getVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): VisibilityInstance<TData> => {\n const makeVisibleColumnsMethod = (\n key: string,\n getColumns: () => Column<TData, unknown>[]\n ): (() => Column<TData, unknown>[]) => {\n return memo(\n () => [\n getColumns(),\n getColumns()\n .filter(d => d.getIsVisible())\n .map(d => d.id)\n .join('_'),\n ],\n columns => {\n return columns.filter(d => d.getIsVisible?.())\n },\n {\n key,\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n )\n }\n\n return {\n getVisibleFlatColumns: makeVisibleColumnsMethod(\n 'getVisibleFlatColumns',\n () => table.getAllFlatColumns()\n ),\n getVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getVisibleLeafColumns',\n () => table.getAllLeafColumns()\n ),\n getLeftVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getLeftVisibleLeafColumns',\n () => table.getLeftLeafColumns()\n ),\n getRightVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getRightVisibleLeafColumns',\n () => table.getRightLeafColumns()\n ),\n getCenterVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getCenterVisibleLeafColumns',\n () => table.getCenterLeafColumns()\n ),\n\n setColumnVisibility: updater =>\n table.options.onColumnVisibilityChange?.(updater),\n\n resetColumnVisibility: defaultState => {\n table.setColumnVisibility(\n defaultState ? {} : table.initialState.columnVisibility ?? {}\n )\n },\n\n toggleAllColumnsVisible: value => {\n value = value ?? !table.getIsAllColumnsVisible()\n\n table.setColumnVisibility(\n table.getAllLeafColumns().reduce(\n (obj, column) => ({\n ...obj,\n [column.id]: !value ? !column.getCanHide?.() : value,\n }),\n {}\n )\n )\n },\n\n getIsAllColumnsVisible: () =>\n !table.getAllLeafColumns().some(column => !column.getIsVisible?.()),\n\n getIsSomeColumnsVisible: () =>\n table.getAllLeafColumns().some(column => column.getIsVisible?.()),\n\n getToggleAllColumnsVisibilityHandler: () => {\n return (e: unknown) => {\n table.toggleAllColumnsVisible(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n },\n }\n },\n}\n","import { flattenBy, functionalUpdate, memo, RequiredKeys } from '../utils'\n\nimport {\n Updater,\n TableOptionsResolved,\n TableState,\n Table,\n ColumnDefTemplate,\n InitialTableState,\n Row,\n Column,\n RowModel,\n ColumnDef,\n TableOptions,\n RowData,\n TableMeta,\n ColumnDefResolved,\n GroupColumnDef,\n} from '../types'\n\n//\nimport { createColumn } from './column'\nimport { Headers } from './headers'\n//\n\nimport { ColumnSizing } from '../features/ColumnSizing'\nimport { Expanding } from '../features/Expanding'\nimport { Filters } from '../features/Filters'\nimport { Grouping, GroupingColumnDef } from '../features/Grouping'\nimport { Ordering } from '../features/Ordering'\nimport { Pagination } from '../features/Pagination'\nimport { Pinning } from '../features/Pinning'\nimport { RowSelection } from '../features/RowSelection'\nimport { Sorting } from '../features/Sorting'\nimport { Visibility } from '../features/Visibility'\n\nexport type TableFeature = {\n getDefaultOptions?: (table: any) => any\n getInitialState?: (initialState?: InitialTableState) => any\n createTable?: (table: any) => any\n getDefaultColumnDef?: () => any\n createColumn?: (column: any, table: any) => any\n createHeader?: (column: any, table: any) => any\n createCell?: (cell: any, column: any, row: any, table: any) => any\n createRow?: (row: any, table: any) => any\n}\n\nconst features = [\n Headers,\n Visibility,\n Ordering,\n Pinning,\n Filters,\n Sorting,\n Grouping,\n Expanding,\n Pagination,\n RowSelection,\n ColumnSizing,\n] as const\n\n//\n\nexport type CoreTableState = {}\n\nexport type CoreOptions<TData extends RowData> = {\n data: TData[]\n state: Partial<TableState>\n onStateChange: (updater: Updater<TableState>) => void\n debugAll?: boolean\n debugTable?: boolean\n debugHeaders?: boolean\n debugColumns?: boolean\n debugRows?: boolean\n initialState?: InitialTableState\n autoResetAll?: boolean\n mergeOptions?: (\n defaultOptions: TableOptions<TData>,\n options: Partial<TableOptions<TData>>\n ) => TableOptions<TData>\n meta?: TableMeta<TData>\n getCoreRowModel: (table: Table<any>) => () => RowModel<any>\n getSubRows?: (originalRow: TData, index: number) => undefined | TData[]\n getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string\n columns: ColumnDef<TData, any>[]\n defaultColumn?: Partial<ColumnDef<TData, unknown>>\n renderFallbackValue: any\n}\n\nexport type CoreInstance<TData extends RowData> = {\n initialState: TableState\n reset: () => void\n options: RequiredKeys<TableOptionsResolved<TData>, 'state'>\n setOptions: (newOptions: Updater<TableOptionsResolved<TData>>) => void\n getState: () => TableState\n setState: (updater: Updater<TableState>) => void\n _features: readonly TableFeature[]\n _queue: (cb: () => void) => void\n _getRowId: (_: TData, index: number, parent?: Row<TData>) => string\n getCoreRowModel: () => RowModel<TData>\n _getCoreRowModel?: () => RowModel<TData>\n getRowModel: () => RowModel<TData>\n getRow: (id: string) => Row<TData>\n _getDefaultColumnDef: () => Partial<ColumnDef<TData, unknown>>\n _getColumnDefs: () => ColumnDef<TData, unknown>[]\n _getAllFlatColumnsById: () => Record<string, Column<TData, unknown>>\n getAllColumns: () => Column<TData, unknown>[]\n getAllFlatColumns: () => Column<TData, unknown>[]\n getAllLeafColumns: () => Column<TData, unknown>[]\n getColumn: (columnId: string) => Column<TData, unknown>\n}\n\nexport function createTable<TData extends RowData>(\n options: TableOptionsResolved<TData>\n): Table<TData> {\n if (options.debugAll || options.debugTable) {\n console.info('Creating Table Instance...')\n }\n\n let table = { _features: features } as unknown as Table<TData>\n\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions?.(table))\n }, {}) as TableOptionsResolved<TData>\n\n const mergeOptions = (options: TableOptionsResolved<TData>) => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options)\n }\n\n return {\n ...defaultOptions,\n ...options,\n }\n }\n\n const coreInitialState: CoreTableState = {}\n\n let initialState = {\n ...coreInitialState,\n ...(options.initialState ?? {}),\n } as TableState\n\n table._features.forEach(feature => {\n initialState = feature.getInitialState?.(initialState) ?? initialState\n })\n\n const queued: (() => void)[] = []\n let queuedTimeout = false\n\n const coreInstance: CoreInstance<TData> = {\n _features: features,\n options: {\n ...defaultOptions,\n ...options,\n },\n initialState,\n _queue: cb => {\n queued.push(cb)\n\n if (!queuedTimeout) {\n queuedTimeout = true\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve()\n .then(() => {\n while (queued.length) {\n queued.shift()!()\n }\n queuedTimeout = false\n })\n .catch(error =>\n setTimeout(() => {\n throw error\n })\n )\n }\n },\n reset: () => {\n table.setState(table.initialState)\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options)\n table.options = mergeOptions(newOptions) as RequiredKeys<\n TableOptionsResolved<TData>,\n 'state'\n >\n },\n\n getState: () => {\n return table.options.state as TableState\n },\n\n setState: (updater: Updater<TableState>) => {\n table.options.onStateChange?.(updater)\n },\n\n _getRowId: (row: TData, index: number, parent?: Row<TData>) =>\n table.options.getRowId?.(row, index, parent) ??\n `${parent ? [parent.id, index].join('.') : index}`,\n\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table)\n }\n\n return table._getCoreRowModel!()\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 table.getPaginationRowModel()\n },\n getRow: (id: string) => {\n const row = table.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 throw new Error()\n }\n\n return row\n },\n _getDefaultColumnDef: memo(\n () => [table.options.defaultColumn],\n defaultColumn => {\n defaultColumn = (defaultColumn ?? {}) as Partial<\n ColumnDef<TData, unknown>\n >\n\n return {\n header: props => {\n const resolvedColumnDef = props.header.column\n .columnDef as ColumnDefResolved<TData>\n\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey\n }\n\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id\n }\n\n return null\n },\n // footer: props => props.header.column.id,\n cell: props => props.renderValue<any>()?.toString?.() ?? null,\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef?.())\n }, {}),\n ...defaultColumn,\n } as Partial<ColumnDef<TData, unknown>>\n },\n {\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n key: process.env.NODE_ENV === 'development' && 'getDefaultColumnDef',\n }\n ),\n\n _getColumnDefs: () => table.options.columns,\n\n getAllColumns: memo(\n () => [table._getColumnDefs()],\n columnDefs => {\n const recurseColumns = (\n columnDefs: ColumnDef<TData, unknown>[],\n parent?: Column<TData, unknown>,\n depth = 0\n ): Column<TData, unknown>[] => {\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent)\n\n const groupingColumnDef = columnDef as GroupColumnDef<\n TData,\n unknown\n >\n\n column.columns = groupingColumnDef.columns\n ? recurseColumns(groupingColumnDef.columns, column, depth + 1)\n : []\n\n return column\n })\n }\n\n return recurseColumns(columnDefs)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getAllFlatColumns: memo(\n () => [table.getAllColumns()],\n allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns()\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n _getAllFlatColumnsById: memo(\n () => [table.getAllFlatColumns()],\n flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column\n return acc\n }, {} as Record<string, Column<TData, unknown>>)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getAllLeafColumns: memo(\n () => [table.getAllColumns(), table._getOrderColumnsFn()],\n (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns())\n return orderColumns(leafColumns)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getColumn: columnId => {\n const column = table._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 throw new Error()\n }\n\n return column\n },\n }\n\n Object.assign(table, coreInstance)\n\n table._features.forEach(feature => {\n return Object.assign(table, feature.createTable?.(table))\n })\n\n return table\n}\n","import { RowData, Cell, Column, Row, Table } from '../types'\nimport { Getter } from '../utils'\n\nexport type CellContext<TData extends RowData, TValue> = {\n table: Table<TData>\n column: Column<TData, TValue>\n row: Row<TData>\n cell: Cell<TData, TValue>\n getValue: Getter<TValue>\n renderValue: Getter<TValue | null>\n}\n\nexport type CoreCell<TData extends RowData, TValue> = {\n id: string\n getValue: CellContext<TData, TValue>['getValue']\n renderValue: CellContext<TData, TValue>['renderValue']\n row: Row<TData>\n column: Column<TData, TValue>\n getContext: () => CellContext<TData, TValue>\n}\n\nexport function createCell<TData extends RowData, TValue>(\n table: Table<TData>,\n row: Row<TData>,\n column: Column<TData, TValue>,\n columnId: string\n) {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\n const cell: CoreCell<TData, TValue> = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: () => ({\n table,\n column,\n row,\n cell: cell as Cell<TData, TValue>,\n getValue: cell.getValue,\n renderValue: cell.renderValue,\n }),\n }\n\n table._features.forEach(feature => {\n Object.assign(\n cell,\n feature.createCell?.(\n cell as Cell<TData, TValue>,\n column,\n row as Row<TData>,\n table\n )\n )\n }, {})\n\n return cell as Cell<TData, TValue>\n}\n","import { RowData, Cell, Row, Table } from '../types'\nimport { flattenBy, memo } from '../utils'\nimport { createCell } from './cell'\n\nexport type CoreRow<TData extends RowData> = {\n id: string\n index: number\n original: TData\n depth: number\n _valuesCache: Record<string, unknown>\n getValue: <TValue>(columnId: string) => TValue\n renderValue: <TValue>(columnId: string) => TValue\n subRows: Row<TData>[]\n getLeafRows: () => Row<TData>[]\n originalSubRows?: TData[]\n getAllCells: () => Cell<TData, unknown>[]\n _getAllCellsByColumnId: () => Record<string, Cell<TData, unknown>>\n}\n\nexport const createRow = <TData extends RowData>(\n table: Table<TData>,\n id: string,\n original: TData,\n rowIndex: number,\n depth: number,\n subRows?: Row<TData>[]\n): Row<TData> => {\n let row: CoreRow<TData> = {\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 = table.getColumn(columnId)\n\n if (!column.accessorFn) {\n return undefined\n }\n\n row._valuesCache[columnId] = column.accessorFn(\n row.original as TData,\n rowIndex\n )\n\n return row._valuesCache[columnId] as any\n },\n renderValue: columnId =>\n row.getValue(columnId) ?? table.options.renderFallbackValue,\n subRows: subRows ?? [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getAllCells: memo(\n () => [table.getAllLeafColumns()],\n leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row as Row<TData>, column, column.id)\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'row.getAllCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n\n _getAllCellsByColumnId: memo(\n () => [row.getAllCells()],\n allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell\n return acc\n }, {} as Record<string, Cell<TData, unknown>>)\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getAllCellsByColumnId',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i]\n Object.assign(row, feature?.createRow?.(row, table))\n }\n\n return row as Row<TData>\n}\n","import { createRow } from '../core/row'\nimport { Row, RowModel, Table, RowData } from '../types'\n\nexport function filterRows<TData extends RowData>(\n rows: Row<TData>[],\n filterRowImpl: (row: Row<TData>) => any,\n table: Table<TData>\n) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table)\n }\n\n return filterRowModelFromRoot(rows, filterRowImpl, table)\n}\n\nexport function filterRowModelFromLeafs<TData extends RowData>(\n rowsToFilter: Row<TData>[],\n filterRow: (row: Row<TData>) => Row<TData>[],\n table: Table<TData>\n): RowModel<TData> {\n const newFilteredFlatRows: Row<TData>[] = []\n const newFilteredRowsById: Record<string, Row<TData>> = {}\n\n const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n const rows: Row<TData>[] = []\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n if (row.subRows?.length) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth\n )\n newRow.columnFilters = row.columnFilters\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n if (!newRow.subRows.length) {\n continue\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}\n\nexport function filterRowModelFromRoot<TData extends RowData>(\n rowsToFilter: Row<TData>[],\n filterRow: (row: Row<TData>) => any,\n table: Table<TData>\n): RowModel<TData> {\n const newFilteredFlatRows: Row<TData>[] = []\n const newFilteredRowsById: Record<string, Row<TData>> = {}\n\n // Filters top level and nested rows\n const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n // Filter from parents downward first\n\n const rows = []\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n const pass = filterRow(row)\n\n if (pass) {\n if (row.subRows?.length) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth\n )\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","import { Table, Row, RowModel, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getExpandedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getState().expanded,\n table.getPreExpandedRowModel(),\n table.options.paginateExpandedRows,\n ],\n (expanded, rowModel, paginateExpandedRows) => {\n if (\n !rowModel.rows.length ||\n (expanded !== true && !Object.keys(expanded ?? {}).length)\n ) {\n return rowModel\n }\n\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel\n }\n\n return expandRows(rowModel)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getExpandedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n )\n}\n\nexport function expandRows<TData extends RowData>(rowModel: RowModel<TData>) {\n const expandedRows: Row<TData>[] = []\n\n const handleRow = (row: Row<TData>) => {\n expandedRows.push(row)\n\n if (row.subRows?.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow)\n }\n }\n\n rowModel.rows.forEach(handleRow)\n\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById,\n }\n}\n","import {\n AccessorFn,\n ColumnDef,\n DisplayColumnDef,\n GroupColumnDef,\n IdentifiedColumnDef,\n RowData,\n} from './types'\nimport { DeepKeys, DeepValue, RequiredKeys } from './utils'\n\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nexport type ColumnHelper<TData extends RowData> = {\n accessor: <\n TAccessor extends AccessorFn<TData> | DeepKeys<TData>,\n TValue extends TAccessor extends AccessorFn<TData, infer TReturn>\n ? TReturn\n : TAccessor extends DeepKeys<TData>\n ? DeepValue<TData, TAccessor>\n : never\n >(\n accessor: TAccessor,\n column: TAccessor extends AccessorFn<TData>\n ? DisplayColumnDef<TData, TValue>\n : IdentifiedColumnDef<TData, TValue>\n ) => ColumnDef<TData, TValue>\n display: (column: DisplayColumnDef<TData>) => ColumnDef<TData, unknown>\n group: (column: GroupColumnDef<TData>) => ColumnDef<TData, unknown>\n}\n\nexport function createColumnHelper<\n TData extends RowData\n>(): ColumnHelper<TData> {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function'\n ? ({\n ...column,\n accessorFn: accessor,\n } as any)\n : {\n ...column,\n accessorKey: accessor,\n }\n },\n display: column => column as ColumnDef<TData, unknown>,\n group: column => column as ColumnDef<TData, unknown>,\n }\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getCoreRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.options.data],\n (\n data\n ): {\n rows: Row<TData>[]\n flatRows: Row<TData>[]\n rowsById: Record<string, Row<TData>>\n } => {\n const rowModel: RowModel<TData> = {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n\n const accessRows = (\n originalRows: TData[],\n depth = 0,\n parent?: Row<TData>\n ): Row<TData>[] => {\n const rows = [] as Row<TData>[]\n\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\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 // Make the row\n const row = createRow(\n table,\n table._getRowId(originalRows[i]!, i, parent),\n originalRows[i]!,\n i,\n depth\n )\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row)\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row\n // Push table row into parent\n rows.push(row)\n\n // Get the original subrows\n if (table.options.getSubRows) {\n row.originalSubRows = table.options.getSubRows(\n originalRows[i]!,\n i\n )\n\n // Then recursively access them\n if (row.originalSubRows?.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row)\n }\n }\n }\n\n return rows\n }\n\n rowModel.rows = accessRows(data)\n\n return rowModel\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { Table, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getFacetedMinMaxValues<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => undefined | [number, number] {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId).getFacetedRowModel()],\n facetedRowModel => {\n const firstValue = facetedRowModel.flatRows[0]?.getValue(columnId)\n\n if (typeof firstValue === 'undefined') {\n return undefined\n }\n\n let facetedMinMaxValues: [any, any] = [firstValue, firstValue]\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const value = facetedRowModel.flatRows[i]!.getValue<number>(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 {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedMinMaxValues_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFacetedRowModel<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => RowModel<TData> {\n return (table, columnId) =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n table.getFilteredRowModel(),\n ],\n (preRowModel, columnFilters, globalFilter) => {\n if (\n !preRowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n return preRowModel\n }\n\n const filterableIds = [\n ...columnFilters.map(d => d.id).filter(d => d !== columnId),\n globalFilter ? '__global__' : undefined,\n ].filter(Boolean) as string[]\n\n const filterRowsImpl = (row: Row<TData>) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n return filterRows(preRowModel.rows, filterRowsImpl, table)\n },\n {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedRowModel_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { Table, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getFacetedUniqueValues<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => Map<any, number> {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId).getFacetedRowModel()],\n facetedRowModel => {\n let facetedUniqueValues = new Map<any, number>()\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const value = facetedRowModel.flatRows[i]?.getValue(columnId)\n\n if (facetedUniqueValues.has(value)) {\n facetedUniqueValues.set(\n value,\n (facetedUniqueValues.get(value) ?? 0) + 1\n )\n } else {\n facetedUniqueValues.set(value, 1)\n }\n }\n\n return facetedUniqueValues\n },\n {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedUniqueValues_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { ResolvedColumnFilter } from '../features/Filters'\nimport { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFilteredRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n ],\n (rowModel, columnFilters, globalFilter) => {\n if (\n !rowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i]!.columnFilters = {}\n rowModel.flatRows[i]!.columnFiltersMeta = {}\n }\n return rowModel\n }\n\n const resolvedColumnFilters: ResolvedColumnFilter<TData>[] = []\n const resolvedGlobalFilters: ResolvedColumnFilter<TData>[] = []\n\n ;(columnFilters ?? []).forEach(d => {\n const column = table.getColumn(d.id)\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Table: Could not find a column to filter with columnId: ${d.id}`\n )\n }\n }\n\n const filterFn = column.getFilterFn()\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `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.resolveFilterValue?.(d.value) ?? d.value,\n })\n })\n\n const filterableIds = columnFilters.map(d => d.id)\n\n const globalFilterFn = table.getGlobalFilterFn()\n\n const globallyFilterableColumns = table\n .getAllLeafColumns()\n .filter(column => column.getCanGlobalFilter())\n\n if (\n globalFilter &&\n globalFilterFn &&\n globallyFilterableColumns.length\n ) {\n filterableIds.push('__global__')\n\n globallyFilterableColumns.forEach(column => {\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue:\n globalFilterFn.resolveFilterValue?.(globalFilter) ??\n globalFilter,\n })\n })\n }\n\n let currentColumnFilter\n let currentGlobalFilter\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j]!\n\n row.columnFilters = {}\n\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i]!\n const id = currentColumnFilter.id\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(\n row,\n id,\n currentColumnFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n }\n }\n\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i]!\n const id = currentGlobalFilter.id\n // Tag the row with the first truthy global filter state\n if (\n currentGlobalFilter.filterFn(\n row,\n id,\n currentGlobalFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n ) {\n row.columnFilters.__global__ = true\n break\n }\n }\n\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false\n }\n }\n }\n\n const filterRowsImpl = (row: Row<TData>) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFilteredRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { flattenBy, memo } from '../utils'\n\nexport function getGroupedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.getState().grouping, table.getPreGroupedRowModel()],\n (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n return rowModel\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId =>\n table.getColumn(columnId)\n )\n\n const groupedFlatRows: Row<TData>[] = []\n const groupedRowsById: Record<string, Row<TData>> = {}\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>[],\n depth = 0,\n parentId?: string\n ) => {\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth\n\n groupedFlatRows.push(row)\n groupedRowsById[row.id] = row\n\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1)\n }\n\n return row\n })\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.subRows)\n : groupedRows\n\n const row = createRow(\n table,\n id,\n leafRows[0]!.original,\n index,\n depth\n )\n\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: (columnId: string) => {\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 row._valuesCache[columnId] =\n groupedRows[0].getValue(columnId) ?? undefined\n }\n\n return row._valuesCache[columnId]\n }\n\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId]\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId)\n const aggregateFn = column.getAggregationFn()\n\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(\n columnId,\n leafRows,\n groupedRows\n )\n\n return row._groupingValuesCache[columnId]\n }\n },\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(rowModel.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 {\n key: process.env.NODE_ENV === 'development' && 'getGroupedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._queue(() => {\n table._autoResetExpanded()\n table._autoResetPageIndex()\n })\n },\n }\n )\n}\n\nfunction groupBy<TData extends RowData>(rows: Row<TData>[], columnId: string) {\n const groupMap = new Map<any, Row<TData>[]>()\n\n return rows.reduce((map, row) => {\n const resKey = `${row.getValue(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 { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { expandRows } from './getExpandedRowModel'\n\nexport function getPaginationRowModel<TData extends RowData>(opts?: {\n initialSync: boolean\n}): (table: Table<TData>) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getState().pagination,\n table.getPrePaginationRowModel(),\n table.options.paginateExpandedRows\n ? undefined\n : table.getState().expanded,\n ],\n (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel\n }\n\n const { pageSize, pageIndex } = 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 let paginatedRowModel: RowModel<TData>\n\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById,\n })\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById,\n }\n }\n\n paginatedRowModel.flatRows = []\n\n const handleRow = (row: Row<TData>) => {\n paginatedRowModel.flatRows.push(row)\n if (row.subRows.length) {\n row.subRows.forEach(handleRow)\n }\n }\n\n paginatedRowModel.rows.forEach(handleRow)\n\n return paginatedRowModel\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getPaginationRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { SortingFn } from '../features/Sorting'\nimport { memo } from '../utils'\n\nexport function getSortedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.getState().sorting, table.getPreSortedRowModel()],\n (sorting, rowModel) => {\n if (!rowModel.rows.length || !sorting?.length) {\n return rowModel\n }\n\n const sortingState = table.getState().sorting\n\n const sortedFlatRows: Row<TData>[] = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort =>\n table.getColumn(sort.id).getCanSort()\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1\n invertSorting?: boolean\n sortingFn: SortingFn<TData>\n }\n > = {}\n\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id)\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn(),\n }\n })\n\n const sortData = (rows: Row<TData>[]) => {\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.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = typeof aValue === 'undefined'\n const bUndefined = typeof bValue === 'undefined'\n\n if (aUndefined || bUndefined) {\n return aUndefined && bUndefined\n ? 0\n : aUndefined\n ? columnInfo.sortUndefined\n : -columnInfo.sortUndefined\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 {\n key: process.env.NODE_ENV === 'development' && 'getSortedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\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","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","createColumn","table","columnDef","depth","parent","_ref","_resolvedColumnDef$id","resolvedColumnDef","_getDefaultColumnDef","accessorKey","accessorFn","id","replace","undefined","header","includes","originalRow","split","Error","column","columns","getFlatColumns","_column$columns","flatMap","_table$options$debugA","options","debugAll","debugColumns","getLeafColumns","_getOrderColumnsFn","orderColumns","_column$columns2","leafColumns","_table$options$debugA2","_features","reduce","obj","feature","Object","assign","createHeader","_options$id","isPlaceholder","placeholderId","subHeaders","colSpan","rowSpan","headerGroup","getLeafHeaders","leafHeaders","recurseHeader","h","map","getContext","Headers","createTable","getHeaderGroups","getAllColumns","getVisibleLeafColumns","getState","columnPinning","left","right","allColumns","_left$map$filter","_right$map$filter","leftColumns","columnId","find","filter","Boolean","rightColumns","buildHeaderGroups","process","debugHeaders","getCenterHeaderGroups","getLeftHeaderGroups","_left$map$filter2","_table$options$debugA3","getRightHeaderGroups","_right$map$filter2","_table$options$debugA4","getFooterGroups","headerGroups","reverse","_table$options$debugA5","getLeftFooterGroups","_table$options$debugA6","getCenterFooterGroups","_table$options$debugA7","getRightFooterGroups","_table$options$debugA8","getFlatHeaders","headers","_table$options$debugA9","getLeftFlatHeaders","_table$options$debugA10","getCenterFlatHeaders","_table$options$debugA11","getRightFlatHeaders","_table$options$debugA12","getCenterLeafHeaders","flatHeaders","_header$subHeaders","_table$options$debugA13","getLeftLeafHeaders","_header$subHeaders2","_table$options$debugA14","getRightLeafHeaders","_header$subHeaders3","_table$options$debugA15","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","_table$options$debugA16","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","getIsVisible","createHeaderGroup","headersToGroup","join","pendingParentHeaders","headerToGroup","latestPendingParentHeader","bottomHeaders","recurseHeadersForSpans","childRowSpans","childColSpan","childRowSpan","defaultColumnSizing","size","minSize","maxSize","Number","MAX_SAFE_INTEGER","ColumnSizing","getDefaultColumnDef","getInitialState","state","columnSizing","columnSizingInfo","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","getDefaultOptions","columnResizeMode","onColumnSizingChange","onColumnSizingInfoChange","getSize","_column$columnDef$min","_column$columnDef$max","columnSize","getStart","position","getLeftVisibleLeafColumns","getRightVisibleLeafColumns","findIndex","prevSiblingColumn","resetSize","setColumnSizing","_ref2","_","rest","getCanResize","_column$columnDef$ena","_table$options$enable","enableResizing","enableColumnResizing","getIsResizing","sum","_header$column$getSiz","prevSiblingHeader","getResizeHandler","getColumn","canResize","e","persist","isTouchStartEvent","touches","clientX","updateOffset","eventType","clientXPos","newColumnSizing","setColumnSizingInfo","_old$startOffset","_old$startSize","_ref3","headerSize","mouseEvents","moveHandler","onMove","upHandler","document","removeEventListener","passiveIfSupported","passiveEventSupported","passive","addEventListener","resetColumnSizing","defaultState","_table$initialState$c","initialState","resetHeaderSizeInfo","_table$initialState$c2","getTotalSize","_table$getHeaderGroup","_table$getHeaderGroup2","getLeftTotalSize","_table$getLeftHeaderG","_table$getLeftHeaderG2","getCenterTotalSize","_table$getCenterHeade","_table$getCenterHeade2","getRightTotalSize","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","window","err","type","Expanding","expanded","onExpandedChange","paginateExpandedRows","registered","queued","_autoResetExpanded","_table$options$autoRe","autoResetAll","autoResetExpanded","manualExpanding","_queue","resetExpanded","setExpanded","toggleAllRowsExpanded","getIsAllRowsExpanded","_table$initialState$e","_table$initialState","getCanSomeRowsExpand","getRowModel","flatRows","row","getCanExpand","getToggleAllRowsExpandedHandler","getIsSomeRowsExpanded","values","keys","getIsExpanded","getExpandedDepth","rowsById","splitId","getPreExpandedRowModel","getSortedRowModel","getExpandedRowModel","_getExpandedRowModel","createRow","toggleExpanded","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","getIsRowExpanded","_table$options$getRow","_row$subRows","getRowCanExpand","enableExpanding","subRows","getToggleExpandedHandler","canExpand","includesString","filterValue","_row$getValue","search","toLowerCase","getValue","autoRemove","val","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","rowValue","resolveFilterValue","unsafeMin","unsafeMax","parsedMin","parseFloat","parsedMax","isNaN","Infinity","temp","filterFns","Filters","filterFn","columnFilters","globalFilter","onColumnFiltersChange","onGlobalFilterChange","filterFromLeafRows","globalFilterFn","getColumnCanGlobalFilter","_table$getCoreRowMode","_table$getCoreRowMode2","value","getCoreRowModel","_getAllCellsByColumnId","getAutoFilterFn","firstRow","Array","isArray","getFilterFn","_table$options$filter","_table$options$filter2","getCanFilter","_table$options$enable2","enableColumnFilter","enableColumnFilters","enableFilters","getCanGlobalFilter","_column$columnDef$ena2","_table$options$enable3","_table$options$enable4","_table$options$getCol","enableGlobalFilter","getIsFiltered","getFilterIndex","getFilterValue","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","_table$getState$colum4","setFilterValue","setColumnFilters","previousfilter","newFilter","_old$filter","shouldAutoRemoveFilter","newFilterObj","_old$map","_getFacetedRowModel","getFacetedRowModel","getPreFilteredRowModel","_getFacetedUniqueValues","getFacetedUniqueValues","Map","_getFacetedMinMaxValues","getFacetedMinMaxValues","columnFiltersMeta","getGlobalAutoFilterFn","getGlobalFilterFn","_table$options$filter3","_table$options$filter4","getAllLeafColumns","_functionalUpdate","setGlobalFilter","resetGlobalFilter","resetColumnFilters","getFilteredRowModel","_getFilteredRowModel","manualFiltering","_getGlobalFacetedRowModel","getGlobalFacetedRowModel","_getGlobalFacetedUniqueValues","getGlobalFacetedUniqueValues","_getGlobalFacetedMinMaxValues","getGlobalFacetedMinMaxValues","aggregationFns","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","unique","from","Set","uniqueCount","_columnId","Grouping","aggregatedCell","props","_toString","_props$getValue","toString","aggregationFn","grouping","onGroupingChange","groupedColumnMode","toggleGrouping","setGrouping","getCanGroup","enableGrouping","getIsGrouped","_table$getState$group","getGroupedIndex","_table$getState$group2","indexOf","getToggleGroupingHandler","canGroup","getAutoAggregationFn","prototype","call","getAggregationFn","_table$options$aggreg","_table$options$aggreg2","resetGrouping","_table$initialState$g","getPreGroupedRowModel","getGroupedRowModel","_getGroupedRowModel","manualGrouping","groupingColumnId","_groupingValuesCache","createCell","cell","getIsPlaceholder","getIsAggregated","nonGroupingColumns","col","g","Ordering","columnOrder","onColumnOrderChange","setColumnOrder","resetColumnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","shift","foundIndex","splice","Pagination","pagination","pageIndex","pageSize","onPaginationChange","_autoResetPageIndex","autoResetPageIndex","manualPagination","resetPageIndex","setPagination","resetPagination","_table$initialState$p","setPageIndex","maxPageIndex","pageCount","_table$initialState$p2","_table$initialState$p3","resetPageSize","_table$initialState$p4","_table$initialState2","_table$initialState2$","setPageSize","topRowIndex","floor","setPageCount","_table$options$pageCo","newPageCount","getPageOptions","getPageCount","pageOptions","fill","i","debugTable","getCanPreviousPage","getCanNextPage","previousPage","nextPage","getPrePaginationRowModel","getPaginationRowModel","_getPaginationRowModel","_table$options$pageCo2","ceil","rows","Pinning","onColumnPinningChange","pin","columnIds","setColumnPinning","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","getCanPin","_d$columnDef$enablePi","enablePinning","getIsPinned","leafColumnIds","isLeft","isRight","getPinnedIndex","getCenterVisibleCells","_getAllVisibleCells","allCells","leftAndRight","debugRows","getLeftVisibleCells","getRightVisibleCells","resetColumnPinning","getDefaultPinningState","getIsSomeColumnsPinned","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","getLeftLeafColumns","getRightLeafColumns","getCenterLeafColumns","RowSelection","rowSelection","onRowSelectionChange","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","setRowSelection","resetRowSelection","_table$initialState$r","toggleAllRowsSelected","getIsAllRowsSelected","preGroupedFlatRows","getCanSelect","toggleAllPageRowsSelected","resolvedValue","getIsAllPageRowsSelected","mutateRowIsSelected","getPreSelectedRowModel","getSelectedRowModel","rowModel","selectRowsFn","getFilteredSelectedRowModel","getGroupedSelectedRowModel","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","_table$getState$rowSe","totalSelected","getIsSomePageRowsSelected","getIsSelected","getIsSomeSelected","getToggleAllRowsSelectedHandler","target","checked","getToggleAllPageRowsSelectedHandler","toggleSelected","isSelected","selectedRowIds","isRowSelected","isSubRowSelected","getIsAllSubRowsSelected","getCanSelectSubRows","getCanMultiSelect","getToggleSelectedHandler","canSelect","_target","getRow","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","selection","_selection$row$id","allChildrenSelected","someSelected","subRow","reSplitAlphaNumeric","compareBasic","a","b","compareAlphanumeric","aStr","bStr","aa","bb","an","parseInt","bn","combo","sort","sortingFns","alphanumeric","rowA","rowB","alphanumericCaseSensitive","text","textCaseSensitive","datetime","basic","Sorting","sorting","sortingFn","onSortingChange","isMultiSortEvent","shiftKey","getAutoSortingFn","firstRows","slice","isString","getAutoSortDir","getSortingFn","_table$options$sortin","_table$options$sortin2","toggleSorting","desc","multi","nextSortingOrder","getNextSortingOrder","hasManualValue","setSorting","existingSorting","existingIndex","sortAction","newSorting","nextDesc","_table$options$maxMul","getCanMultiSort","maxMultiSortColCount","getFirstSortDir","_column$columnDef$sor","sortDescFirst","firstSortDirection","isSorted","getIsSorted","enableSortingRemoval","enableMultiRemove","getCanSort","enableSorting","enableMultiSort","_table$getState$sorti","columnSort","getSortIndex","_table$getState$sorti2","_table$getState$sorti3","clearSorting","getToggleSortingHandler","canSort","resetSorting","_table$initialState$s","getPreSortedRowModel","_getSortedRowModel","manualSorting","Visibility","columnVisibility","onColumnVisibilityChange","toggleVisibility","getCanHide","setColumnVisibility","enableHiding","getToggleVisibilityHandler","getAllCells","cells","getVisibleCells","makeVisibleColumnsMethod","getColumns","getVisibleFlatColumns","getAllFlatColumns","getCenterVisibleLeafColumns","resetColumnVisibility","toggleAllColumnsVisible","_value","getIsAllColumnsVisible","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityHandler","features","renderValue","_cell$getValue","renderFallbackValue","original","rowIndex","_valuesCache","hasOwnProperty","getLeafRows","acc","filterRows","filterRowImpl","rowsToFilter","filterRow","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","filterRowModelFromLeafs","filterRowModelFromRoot","expandRows","expandedRows","handleRow","accessor","display","group","_options$initialState","defaultOptions","_feature$getInitialSt","queuedTimeout","coreInstance","cb","Promise","resolve","then","catch","error","setTimeout","reset","setOptions","newOptions","mergeOptions","onStateChange","_getRowId","getRowId","_getCoreRowModel","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","_getColumnDefs","columnDefs","recurseColumns","groupingColumnDef","_getAllFlatColumnsById","flatColumns","data","accessRows","originalRows","_row$originalSubRows","getSubRows","originalSubRows","facetedRowModel","_facetedRowModel$flat","firstValue","facetedMinMaxValues","preRowModel","filterableIds","facetedUniqueValues","_facetedUniqueValues$","has","set","get","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","globallyFilterableColumns","currentColumnFilter","currentGlobalFilter","_globalFilterFn$resol","j","filterMeta","__global__","existingGrouping","groupedFlatRows","groupedRowsById","groupUpRecursively","parentId","rowGroupsMap","groupMap","resKey","previous","groupBy","aggregatedGroupedRows","entries","groupingValue","groupedRows","_groupedRows$0$getVal","aggregateFn","pageStart","pageEnd","paginatedRowModel","sortingState","sortedFlatRows","availableSorting","columnInfoById","sortEntry","sortUndefined","invertSorting","sortData","sortedData","_sortEntry$desc","columnInfo","isDesc","aUndefined","bUndefined","sortInt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/core/column.ts","../../src/core/headers.ts","../../src/features/ColumnSizing.ts","../../src/features/Expanding.ts","../../src/filterFns.ts","../../src/features/Filters.ts","../../src/aggregationFns.ts","../../src/features/Grouping.ts","../../src/features/Ordering.ts","../../src/features/Pagination.ts","../../src/features/Pinning.ts","../../src/features/RowSelection.ts","../../src/sortingFns.ts","../../src/features/Sorting.ts","../../src/features/Visibility.ts","../../src/core/table.ts","../../src/core/cell.ts","../../src/core/row.ts","../../src/utils/filterRowsUtils.ts","../../src/utils/getExpandedRowModel.ts","../../src/columnHelper.ts","../../src/utils/getCoreRowModel.ts","../../src/utils/getFacetedMinMaxValues.ts","../../src/utils/getFacetedRowModel.ts","../../src/utils/getFacetedUniqueValues.ts","../../src/utils/getFilteredRowModel.ts","../../src/utils/getGroupedRowModel.ts","../../src/utils/getPaginationRowModel.ts","../../src/utils/getSortedRowModel.ts"],"sourcesContent":["import { TableState, Updater } from './types'\n\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 extends { [TKey in keyof T]?: any }> = Omit<\n T,\n keyof U\n> &\n U\n\nexport type UnionToIntersection<T> = (\n T extends any ? (x: T) => any : never\n) extends (x: infer R) => any\n ? R\n : never\n\nexport type IsAny<T, Y, N> = 1 extends 0 & T ? Y : N\nexport type IsKnown<T, Y, N> = unknown extends T ? N : Y\n\ntype ComputeRange<\n N extends number,\n Result extends Array<unknown> = []\n> = Result['length'] extends N\n ? Result\n : ComputeRange<N, [...Result, Result['length']]>\ntype Index40 = ComputeRange<40>[number]\n\n// Is this type a tuple?\ntype IsTuple<T> = T extends readonly any[] & { length: infer Length }\n ? Length extends Index40\n ? T\n : never\n : never\n\n// If this type is a tuple, what indices are allowed?\ntype AllowedIndexes<\n Tuple extends ReadonlyArray<any>,\n Keys extends number = never\n> = Tuple extends readonly []\n ? Keys\n : Tuple extends readonly [infer _, ...infer Tail]\n ? AllowedIndexes<Tail, Keys | Tail['length']>\n : Keys\n\nexport type DeepKeys<T> = unknown extends T\n ? keyof T\n : object extends T\n ? string\n : T extends readonly any[] & IsTuple<T>\n ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>>\n : T extends any[]\n ? never & 'Dynamic length array indexing is not supported'\n : T extends Date\n ? never\n : T extends object\n ? (keyof T & string) | DeepKeysPrefix<T, keyof T>\n : never\n\ntype DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string)\n ? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}`\n : never\n\nexport type DeepValue<T, TProp> = T extends Record<string | number, any>\n ? TProp extends `${infer TBranch}.${infer TDeepProp}`\n ? DeepValue<T[TBranch], TDeepProp>\n : T[TProp & string]\n : never\n\nexport type NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport type Getter<TValue> = <TTValue = TValue>() => NoInfer<TTValue>\n\n///\n\nexport function functionalUpdate<T>(updater: Updater<T>, input: T): T {\n return typeof updater === 'function'\n ? (updater as (input: T) => T)(input)\n : updater\n}\n\nexport function noop() {\n //\n}\n\nexport function makeStateUpdater<K extends keyof TableState>(\n key: K,\n instance: unknown\n) {\n return (updater: Updater<TableState[K]>) => {\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\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: any\n debug?: () => any\n onChange?: (result: TResult) => void\n }\n): () => TResult {\n let deps: any[] = []\n let result: TResult | undefined\n\n return () => {\n let depTime: number\n if (opts.key && opts.debug) depTime = Date.now()\n\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 return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug) resultTime = Date.now()\n\n result = fn(...newDeps)\n opts?.onChange?.(result)\n\n if (opts.key && opts.debug) {\n if (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: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts?.key\n )\n }\n }\n\n return result!\n }\n}\n","import { TaggedTemplateExpression } from '@babel/types'\nimport {\n Column,\n Table,\n AccessorFn,\n ColumnDef,\n ColumnDefTemplate,\n RowData,\n ColumnMeta,\n ColumnDefResolved,\n} from '../types'\nimport { memo } from '../utils'\n\nexport type CoreColumn<TData extends RowData, TValue> = {\n id: string\n depth: number\n accessorFn?: AccessorFn<TData, TValue>\n columnDef: ColumnDef<TData, TValue>\n columns: Column<TData, TValue>[]\n parent?: Column<TData, TValue>\n getFlatColumns: () => Column<TData, TValue>[]\n getLeafColumns: () => Column<TData, TValue>[]\n}\n\nexport function createColumn<TData extends RowData, TValue>(\n table: Table<TData>,\n columnDef: ColumnDef<TData, TValue>,\n depth: number,\n parent?: Column<TData, TValue>\n) {\n const defaultColumn = table._getDefaultColumnDef()\n\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef,\n } as ColumnDefResolved<TData>\n\n const accessorKey = resolvedColumnDef.accessorKey\n\n let id =\n resolvedColumnDef.id ??\n (accessorKey ? accessorKey.replace('.', '_') : undefined) ??\n (typeof resolvedColumnDef.header === 'string'\n ? resolvedColumnDef.header\n : undefined)\n\n let accessorFn: AccessorFn<TData> | undefined\n\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = (originalRow: TData) => {\n let result = originalRow as Record<string, any>\n\n for (const key of accessorKey.split('.')) {\n result = result[key]\n }\n\n return result\n }\n } else {\n accessorFn = (originalRow: TData) =>\n (originalRow as any)[resolvedColumnDef.accessorKey]\n }\n }\n\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\n resolvedColumnDef.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<TData, any> = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent as any,\n depth,\n columnDef: resolvedColumnDef as ColumnDef<TData, any>,\n columns: [],\n getFlatColumns: memo(\n () => [true],\n () => {\n return [\n column as Column<TData, TValue>,\n ...column.columns?.flatMap(d => d.getFlatColumns()),\n ]\n },\n {\n key: process.env.NODE_ENV === 'production' && 'column.getFlatColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n getLeafColumns: memo(\n () => [table._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 [column as Column<TData, TValue>]\n },\n {\n key: process.env.NODE_ENV === 'production' && 'column.getLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n }\n\n column = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.createColumn?.(column, table))\n }, column)\n\n // Yes, we have to convert table to uknown, because we know more than the compiler here.\n return column as Column<TData, TValue>\n}\n","import { RowData, Column, Header, HeaderGroup, Table } from '../types'\nimport { memo } from '../utils'\nimport { TableFeature } from './table'\n\nexport type CoreHeaderGroup<TData extends RowData> = {\n id: string\n depth: number\n headers: Header<TData, unknown>[]\n}\n\nexport type HeaderContext<TData, TValue> = {\n table: Table<TData>\n header: Header<TData, TValue>\n column: Column<TData, TValue>\n}\n\nexport type CoreHeader<TData extends RowData, TValue> = {\n id: string\n index: number\n depth: number\n column: Column<TData, TValue>\n headerGroup: HeaderGroup<TData>\n subHeaders: Header<TData, TValue>[]\n colSpan: number\n rowSpan: number\n getLeafHeaders: () => Header<TData, unknown>[]\n isPlaceholder: boolean\n placeholderId?: string\n getContext: () => HeaderContext<TData, TValue>\n}\n\nexport type HeadersInstance<TData extends RowData> = {\n getHeaderGroups: () => HeaderGroup<TData>[]\n getLeftHeaderGroups: () => HeaderGroup<TData>[]\n getCenterHeaderGroups: () => HeaderGroup<TData>[]\n getRightHeaderGroups: () => HeaderGroup<TData>[]\n\n getFooterGroups: () => HeaderGroup<TData>[]\n getLeftFooterGroups: () => HeaderGroup<TData>[]\n getCenterFooterGroups: () => HeaderGroup<TData>[]\n getRightFooterGroups: () => HeaderGroup<TData>[]\n\n getFlatHeaders: () => Header<TData, unknown>[]\n getLeftFlatHeaders: () => Header<TData, unknown>[]\n getCenterFlatHeaders: () => Header<TData, unknown>[]\n getRightFlatHeaders: () => Header<TData, unknown>[]\n\n getLeafHeaders: () => Header<TData, unknown>[]\n getLeftLeafHeaders: () => Header<TData, unknown>[]\n getCenterLeafHeaders: () => Header<TData, unknown>[]\n getRightLeafHeaders: () => Header<TData, unknown>[]\n}\n\n//\n\nfunction createHeader<TData extends RowData, TValue>(\n table: Table<TData>,\n column: Column<TData, TValue>,\n options: {\n id?: string\n isPlaceholder?: boolean\n placeholderId?: string\n index: number\n depth: number\n }\n) {\n const id = options.id ?? column.id\n\n let header: CoreHeader<TData, TValue> = {\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: (): Header<TData, unknown>[] => {\n const leafHeaders: Header<TData, unknown>[] = []\n\n const recurseHeader = (h: CoreHeader<TData, any>) => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader)\n }\n leafHeaders.push(h as Header<TData, unknown>)\n }\n\n recurseHeader(header)\n\n return leafHeaders\n },\n getContext: () => ({\n table,\n header: header as Header<TData, TValue>,\n column,\n }),\n }\n\n table._features.forEach(feature => {\n Object.assign(header, feature.createHeader?.(header, table))\n })\n\n return header as Header<TData, TValue>\n}\n\nexport const Headers: TableFeature = {\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): HeadersInstance<TData> => {\n return {\n // Header Groups\n\n getHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, left, right) => {\n const leftColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const rightColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n const centerColumns = leafColumns.filter(\n column => !left?.includes(column.id) && !right?.includes(column.id)\n )\n\n const headerGroups = buildHeaderGroups(\n allColumns,\n [...leftColumns, ...centerColumns, ...rightColumns],\n table\n )\n\n return headerGroups\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n table.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, table, 'center')\n },\n {\n key:\n process.env.NODE_ENV === 'development' && 'getCenterHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.left,\n ],\n (allColumns, leafColumns, left) => {\n const orderedLeafColumns =\n left\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(\n allColumns,\n orderedLeafColumns,\n table,\n 'left'\n )\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightHeaderGroups: memo(\n () => [\n table.getAllColumns(),\n table.getVisibleLeafColumns(),\n table.getState().columnPinning.right,\n ],\n (allColumns, leafColumns, right) => {\n const orderedLeafColumns =\n right\n ?.map(columnId => leafColumns.find(d => d.id === columnId)!)\n .filter(Boolean) ?? []\n\n return buildHeaderGroups(\n allColumns,\n orderedLeafColumns,\n table,\n 'right'\n )\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightHeaderGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Footer Groups\n\n getFooterGroups: memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftFooterGroups: memo(\n () => [table.getLeftHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterFooterGroups: memo(\n () => [table.getCenterHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key:\n process.env.NODE_ENV === 'development' && 'getCenterFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightFooterGroups: memo(\n () => [table.getRightHeaderGroups()],\n headerGroups => {\n return [...headerGroups].reverse()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightFooterGroups',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Flat Headers\n\n getFlatHeaders: memo(\n () => [table.getHeaderGroups()],\n headerGroups => {\n return headerGroups\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftFlatHeaders: memo(\n () => [table.getLeftHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getCenterFlatHeaders: memo(\n () => [table.getCenterHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightFlatHeaders: memo(\n () => [table.getRightHeaderGroups()],\n left => {\n return left\n .map(headerGroup => {\n return headerGroup.headers\n })\n .flat()\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightFlatHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n // Leaf Headers\n\n getCenterLeafHeaders: memo(\n () => [table.getCenterFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeftLeafHeaders: memo(\n () => [table.getLeftFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getRightLeafHeaders: memo(\n () => [table.getRightFlatHeaders()],\n flatHeaders => {\n return flatHeaders.filter(header => !header.subHeaders?.length)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n\n getLeafHeaders: memo(\n () => [\n table.getLeftHeaderGroups(),\n table.getCenterHeaderGroups(),\n table.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 {\n key: process.env.NODE_ENV === 'development' && 'getLeafHeaders',\n debug: () => table.options.debugAll ?? table.options.debugHeaders,\n }\n ),\n }\n },\n}\n\nexport function buildHeaderGroups<TData extends RowData>(\n allColumns: Column<TData, unknown>[],\n columnsToGroup: Column<TData, unknown>[],\n table: Table<TData>,\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 = (columns: Column<TData, unknown>[], depth = 1) => {\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<TData>[] = []\n\n const createHeaderGroup = (\n headersToGroup: Header<TData, unknown>[],\n depth: number\n ) => {\n // The header group we are creating\n const headerGroup: HeaderGroup<TData> = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: [],\n }\n\n // The parent columns we're going to scan next\n const pendingParentHeaders: Header<TData, unknown>[] = []\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0]\n\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth\n\n let column: Column<TData, unknown>\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 (\n latestPendingParentHeader &&\n latestPendingParentHeader?.column === column\n ) {\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 = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup?.id]\n .filter(Boolean)\n .join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder\n ? `${pendingParentHeaders.filter(d => d.column === column).length}`\n : undefined,\n depth,\n index: pendingParentHeaders.length,\n })\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup)\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header)\n }\n\n headerGroup.headers.push(headerToGroup)\n headerToGroup.headerGroup = headerGroup\n })\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) =>\n createHeader(table, column, {\n depth: maxDepth,\n index,\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, unknown>[]\n ): { colSpan: number; rowSpan: number }[] => {\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\n header.rowSpan = rowSpan\n\n return { colSpan, rowSpan }\n })\n }\n\n recurseHeadersForSpans(headerGroups[0]?.headers ?? [])\n\n return headerGroups\n}\n","import { TableFeature } from '../core/table'\nimport { RowData, Column, Header, OnChangeFn, Table, Updater } from '../types'\nimport { makeStateUpdater } from '../utils'\nimport { ColumnPinningPosition } from './Pinning'\n\n//\n\nexport type ColumnSizingTableState = {\n columnSizing: ColumnSizingState\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = 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 ColumnResizeMode = 'onChange' | 'onEnd'\n\nexport type ColumnSizingOptions = {\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingDefaultOptions = {\n columnResizeMode: ColumnResizeMode\n onColumnSizingChange: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport type ColumnSizingInstance = {\n setColumnSizing: (updater: Updater<ColumnSizingState>) => void\n setColumnSizingInfo: (updater: Updater<ColumnSizingInfoState>) => void\n resetColumnSizing: (defaultState?: boolean) => void\n resetHeaderSizeInfo: (defaultState?: boolean) => void\n getTotalSize: () => number\n getLeftTotalSize: () => number\n getCenterTotalSize: () => number\n getRightTotalSize: () => number\n}\n\nexport type ColumnSizingColumnDef = {\n enableResizing?: boolean\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nexport type ColumnSizingColumn = {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getCanResize: () => boolean\n getIsResizing: () => boolean\n resetSize: () => void\n}\n\nexport type ColumnSizingHeader = {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getResizeHandler: () => (event: unknown) => void\n}\n\n//\n\nexport const defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n}\n\nconst getDefaultColumnSizingInfoState = (): ColumnSizingInfoState => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: [],\n})\n\nexport const ColumnSizing: TableFeature = {\n getDefaultColumnDef: (): ColumnSizingColumnDef => {\n return defaultColumnSizing\n },\n getInitialState: (state): ColumnSizingTableState => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnSizingDefaultOptions => {\n return {\n columnResizeMode: 'onEnd',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): ColumnSizingColumn => {\n return {\n getSize: () => {\n const columnSize = table.getState().columnSizing[column.id]\n\n return Math.min(\n Math.max(\n column.columnDef.minSize ?? defaultColumnSizing.minSize,\n columnSize ?? column.columnDef.size ?? defaultColumnSizing.size\n ),\n column.columnDef.maxSize ?? defaultColumnSizing.maxSize\n )\n },\n getStart: position => {\n const columns = !position\n ? table.getVisibleLeafColumns()\n : position === 'left'\n ? table.getLeftVisibleLeafColumns()\n : table.getRightVisibleLeafColumns()\n\n const index = columns.findIndex(d => d.id === column.id)\n\n if (index > 0) {\n const prevSiblingColumn = columns[index - 1]!\n\n return (\n prevSiblingColumn.getStart(position) + prevSiblingColumn.getSize()\n )\n }\n\n return 0\n },\n resetSize: () => {\n table.setColumnSizing(({ [column.id]: _, ...rest }) => {\n return rest\n })\n },\n getCanResize: () => {\n return (\n (column.columnDef.enableResizing ?? true) &&\n (table.options.enableColumnResizing ?? true)\n )\n },\n getIsResizing: () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id\n },\n }\n },\n\n createHeader: <TData extends RowData, TValue>(\n header: Header<TData, TValue>,\n table: Table<TData>\n ): ColumnSizingHeader => {\n return {\n getSize: () => {\n let sum = 0\n\n const recurse = (header: Header<TData, TValue>) => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse)\n } else {\n sum += header.column.getSize() ?? 0\n }\n }\n\n recurse(header)\n\n return sum\n },\n getStart: () => {\n if (header.index > 0) {\n const prevSiblingHeader =\n header.headerGroup.headers[header.index - 1]!\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize()\n }\n\n return 0\n },\n getResizeHandler: () => {\n const column = table.getColumn(header.column.id)\n const canResize = column.getCanResize()\n\n return (e: unknown) => {\n if (!canResize) {\n return\n }\n\n ;(e as any).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 = header.getSize()\n\n const columnSizingStart: [string, number][] = header\n ? header\n .getLeafHeaders()\n .map(d => [d.column.id, d.column.getSize()])\n : [[column.id, column.getSize()]]\n\n const clientX = isTouchStartEvent(e)\n ? Math.round(e.touches[0]!.clientX)\n : (e as MouseEvent).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: ColumnSizingState = {}\n\n table.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, headerSize]) => {\n newColumnSizing[columnId] =\n Math.round(\n Math.max(headerSize + headerSize * deltaPercentage, 0) * 100\n ) / 100\n })\n\n return {\n ...old,\n deltaOffset,\n deltaPercentage,\n }\n })\n\n if (\n table.options.columnResizeMode === 'onChange' ||\n eventType === 'end'\n ) {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing,\n }))\n }\n }\n\n const onMove = (clientXPos?: number) =>\n updateOffset('move', clientXPos)\n\n const onEnd = (clientXPos?: number) => {\n updateOffset('end', clientXPos)\n\n table.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 } 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 table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id,\n }))\n }\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ColumnSizingInstance => {\n return {\n setColumnSizing: updater => table.options.onColumnSizingChange?.(updater),\n setColumnSizingInfo: updater =>\n table.options.onColumnSizingInfoChange?.(updater),\n resetColumnSizing: defaultState => {\n table.setColumnSizing(\n defaultState ? {} : table.initialState.columnSizing ?? {}\n )\n },\n resetHeaderSizeInfo: defaultState => {\n table.setColumnSizingInfo(\n defaultState\n ? getDefaultColumnSizingInfoState()\n : table.initialState.columnSizingInfo ??\n getDefaultColumnSizingInfoState()\n )\n },\n getTotalSize: () =>\n table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getLeftTotalSize: () =>\n table.getLeftHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getCenterTotalSize: () =>\n table.getCenterHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n getRightTotalSize: () =>\n table.getRightHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header.getSize()\n }, 0) ?? 0,\n }\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(e: unknown): e is TouchEvent {\n return (e as TouchEvent).type === 'touchstart'\n}\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, Row, Updater, RowData } from '../types'\nimport { makeStateUpdater } 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 getToggleExpandedHandler: () => () => void\n}\n\nexport type ExpandedOptions<TData extends RowData> = {\n manualExpanding?: boolean\n onExpandedChange?: OnChangeFn<ExpandedState>\n autoResetExpanded?: boolean\n enableExpanding?: boolean\n getExpandedRowModel?: (table: Table<any>) => () => RowModel<any>\n getIsRowExpanded?: (row: Row<TData>) => boolean\n getRowCanExpand?: (row: Row<TData>) => boolean\n paginateExpandedRows?: boolean\n}\n\nexport type ExpandedInstance<TData extends RowData> = {\n _autoResetExpanded: () => void\n setExpanded: (updater: Updater<ExpandedState>) => void\n toggleAllRowsExpanded: (expanded?: boolean) => void\n resetExpanded: (defaultState?: boolean) => void\n getCanSomeRowsExpand: () => boolean\n getToggleAllRowsExpandedHandler: () => (event: unknown) => void\n getIsSomeRowsExpanded: () => boolean\n getIsAllRowsExpanded: () => boolean\n getExpandedDepth: () => number\n getExpandedRowModel: () => RowModel<TData>\n _getExpandedRowModel?: () => RowModel<TData>\n getPreExpandedRowModel: () => RowModel<TData>\n}\n\n//\n\nexport const Expanding: TableFeature = {\n getInitialState: (state): ExpandedTableState => {\n return {\n expanded: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ExpandedOptions<TData> => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true,\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ExpandedInstance<TData> => {\n let registered = false\n let queued = false\n\n return {\n _autoResetExpanded: () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetExpanded ??\n !table.options.manualExpanding\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetExpanded()\n queued = false\n })\n }\n },\n setExpanded: updater => table.options.onExpandedChange?.(updater),\n toggleAllRowsExpanded: expanded => {\n if (expanded ?? !table.getIsAllRowsExpanded()) {\n table.setExpanded(true)\n } else {\n table.setExpanded({})\n }\n },\n resetExpanded: defaultState => {\n table.setExpanded(\n defaultState ? {} : table.initialState?.expanded ?? {}\n )\n },\n getCanSomeRowsExpand: () => {\n return table.getRowModel().flatRows.some(row => row.getCanExpand())\n },\n getToggleAllRowsExpandedHandler: () => {\n return (e: unknown) => {\n ;(e as any).persist?.()\n table.toggleAllRowsExpanded()\n }\n },\n getIsSomeRowsExpanded: () => {\n const expanded = table.getState().expanded\n return expanded === true || Object.values(expanded).some(Boolean)\n },\n getIsAllRowsExpanded: () => {\n const expanded = table.getState().expanded\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true\n }\n\n if (!Object.keys(expanded).length) {\n return false\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => row.getIsExpanded())) {\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 table.getState().expanded === true\n ? Object.keys(table.getRowModel().rowsById)\n : Object.keys(table.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 getPreExpandedRowModel: () => table.getSortedRowModel(),\n getExpandedRowModel: () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table)\n }\n\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel()\n }\n\n return table._getExpandedRowModel()\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): ExpandedRow => {\n return {\n toggleExpanded: expanded => {\n table.setExpanded(old => {\n const exists = old === true ? true : !!old?.[row.id]\n\n let oldExpanded: ExpandedStateList = {}\n\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).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 [row.id]: true,\n }\n }\n\n if (exists && !expanded) {\n const { [row.id]: _, ...rest } = oldExpanded\n return rest\n }\n\n return old\n })\n },\n getIsExpanded: () => {\n const expanded = table.getState().expanded\n\n return !!(\n table.options.getIsRowExpanded?.(row) ??\n (expanded === true || expanded?.[row.id])\n )\n },\n getCanExpand: () => {\n return (\n table.options.getRowCanExpand?.(row) ??\n ((table.options.enableExpanding ?? true) && !!row.subRows?.length)\n )\n },\n getToggleExpandedHandler: () => {\n const canExpand = row.getCanExpand()\n\n return () => {\n if (!canExpand) return\n row.toggleExpanded()\n }\n },\n }\n },\n}\n","import { FilterFn } from './features/Filters'\n\nconst includesString: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n const search = filterValue.toLowerCase()\n return row.getValue<string>(columnId)?.toLowerCase().includes(search)\n}\n\nincludesString.autoRemove = (val: any) => testFalsey(val)\n\nconst includesStringSensitive: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return row.getValue<string>(columnId)?.includes(filterValue)\n}\n\nincludesStringSensitive.autoRemove = (val: any) => testFalsey(val)\n\nconst equalsString: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: string\n) => {\n return (\n row.getValue<string>(columnId)?.toLowerCase() === filterValue.toLowerCase()\n )\n}\n\nequalsString.autoRemove = (val: any) => testFalsey(val)\n\nconst arrIncludes: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue<unknown[]>(columnId)?.includes(filterValue)\n}\n\narrIncludes.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesAll: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return !filterValue.some(\n val => !row.getValue<unknown[]>(columnId)?.includes(val)\n )\n}\n\narrIncludesAll.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst arrIncludesSome: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown[]\n) => {\n return filterValue.some(val =>\n row.getValue<unknown[]>(columnId)?.includes(val)\n )\n}\n\narrIncludesSome.autoRemove = (val: any) => testFalsey(val) || !val?.length\n\nconst equals: FilterFn<any> = (row, columnId: string, filterValue: unknown) => {\n return row.getValue(columnId) === filterValue\n}\n\nequals.autoRemove = (val: any) => testFalsey(val)\n\nconst weakEquals: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: unknown\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nweakEquals.autoRemove = (val: any) => testFalsey(val)\n\nconst inNumberRange: FilterFn<any> = (\n row,\n columnId: string,\n filterValue: [number, number]\n) => {\n let [min, max] = filterValue\n\n const rowValue = row.getValue<number>(columnId)\n return rowValue >= min && rowValue <= max\n}\n\ninNumberRange.resolveFilterValue = (val: [any, any]) => {\n let [unsafeMin, unsafeMax] = val\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 [min, max] as const\n}\n\ninNumberRange.autoRemove = (val: any) =>\n testFalsey(val) || (testFalsey(val[0]) && testFalsey(val[1]))\n\n// Export\n\nexport const filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsey(val: any) {\n return val === undefined || val === null || val === ''\n}\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport { BuiltInFilterFn, filterFns } from '../filterFns'\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n FilterMeta,\n FilterFns,\n} from '../types'\nimport { functionalUpdate, isFunction, makeStateUpdater } from '../utils'\n\nexport type FiltersTableState = {\n columnFilters: ColumnFiltersState\n globalFilter: any\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport type ColumnFilter = {\n id: string\n value: unknown\n}\n\nexport type ResolvedColumnFilter<TData extends RowData> = {\n id: string\n resolvedValue: unknown\n filterFn: FilterFn<TData>\n}\n\nexport type FilterFn<TData extends RowData> = {\n (\n row: Row<TData>,\n columnId: string,\n filterValue: any,\n addMeta: (meta: FilterMeta) => void\n ): boolean\n\n resolveFilterValue?: TransformFilterValueFn<TData>\n autoRemove?: ColumnFilterAutoRemoveTestFn<TData>\n}\n\nexport type TransformFilterValueFn<TData extends RowData> = (\n value: any,\n column?: Column<TData, unknown>\n) => unknown\n\nexport type ColumnFilterAutoRemoveTestFn<TData extends RowData> = (\n value: any,\n column?: Column<TData, unknown>\n) => boolean\n\nexport type CustomFilterFns<TData extends RowData> = Record<\n string,\n FilterFn<TData>\n>\n\nexport type FilterFnOption<TData extends RowData> =\n | 'auto'\n | BuiltInFilterFn\n | keyof FilterFns\n | FilterFn<TData>\n\nexport type FiltersColumnDef<TData extends RowData> = {\n filterFn?: FilterFnOption<TData>\n enableColumnFilter?: boolean\n enableGlobalFilter?: boolean\n}\n\nexport type FiltersColumn<TData extends RowData> = {\n getAutoFilterFn: () => FilterFn<TData> | undefined\n getFilterFn: () => FilterFn<TData> | undefined\n setFilterValue: (updater: Updater<any>) => void\n getCanFilter: () => boolean\n getCanGlobalFilter: () => boolean\n getFacetedRowModel: () => RowModel<TData>\n _getFacetedRowModel?: () => RowModel<TData>\n getIsFiltered: () => boolean\n getFilterValue: () => unknown\n getFilterIndex: () => number\n getFacetedUniqueValues: () => Map<any, number>\n _getFacetedUniqueValues?: () => Map<any, number>\n getFacetedMinMaxValues: () => undefined | [number, number]\n _getFacetedMinMaxValues?: () => undefined | [number, number]\n}\n\nexport type FiltersRow<TData extends RowData> = {\n columnFilters: Record<string, boolean>\n columnFiltersMeta: Record<string, FilterMeta>\n}\n\nexport type FiltersOptions<TData extends RowData> = {\n enableFilters?: boolean\n manualFiltering?: boolean\n filterFromLeafRows?: boolean\n getFilteredRowModel?: (table: Table<any>) => () => RowModel<any>\n\n // Column\n onColumnFiltersChange?: OnChangeFn<ColumnFiltersState>\n enableColumnFilters?: boolean\n\n // Global\n globalFilterFn?: FilterFnOption<TData>\n onGlobalFilterChange?: OnChangeFn<any>\n enableGlobalFilter?: boolean\n getColumnCanGlobalFilter?: (column: Column<TData, unknown>) => boolean\n\n // Faceting\n getFacetedRowModel?: (\n table: Table<TData>,\n columnId: string\n ) => () => RowModel<TData>\n getFacetedUniqueValues?: (\n table: Table<TData>,\n columnId: string\n ) => () => Map<any, number>\n getFacetedMinMaxValues?: (\n table: Table<TData>,\n columnId: string\n ) => () => undefined | [number, number]\n} & (keyof FilterFns extends never\n ? {\n filterFns?: Record<string, FilterFn<any>>\n }\n : {\n filterFns: Record<keyof FilterFns, FilterFn<any>>\n })\n\nexport type FiltersInstance<TData extends RowData> = {\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => void\n\n resetColumnFilters: (defaultState?: boolean) => void\n\n // Column Filters\n getPreFilteredRowModel: () => RowModel<TData>\n getFilteredRowModel: () => RowModel<TData>\n _getFilteredRowModel?: () => RowModel<TData>\n\n // Global Filters\n setGlobalFilter: (updater: Updater<any>) => void\n resetGlobalFilter: (defaultState?: boolean) => void\n getGlobalAutoFilterFn: () => FilterFn<TData> | undefined\n getGlobalFilterFn: () => FilterFn<TData> | undefined\n getGlobalFacetedRowModel: () => RowModel<TData>\n _getGlobalFacetedRowModel?: () => RowModel<TData>\n getGlobalFacetedUniqueValues: () => Map<any, number>\n _getGlobalFacetedUniqueValues?: () => Map<any, number>\n getGlobalFacetedMinMaxValues: () => undefined | [number, number]\n _getGlobalFacetedMinMaxValues?: () => undefined | [number, number]\n}\n\n//\n\nexport const Filters: TableFeature = {\n getDefaultColumnDef: <TData extends RowData>(): FiltersColumnDef<TData> => {\n return {\n filterFn: 'auto',\n }\n },\n\n getInitialState: (state): FiltersTableState => {\n return {\n columnFilters: [],\n globalFilter: undefined,\n // filtersProgress: 1,\n // facetProgress: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): FiltersOptions<TData> => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n filterFromLeafRows: false,\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n const value = table\n .getCoreRowModel()\n .flatRows[0]?._getAllCellsByColumnId()\n [column.id]?.getValue()\n\n return typeof value === 'string' || typeof value === 'number'\n },\n }\n },\n\n createColumn: <TData extends RowData>(\n column: Column<TData, unknown>,\n table: Table<TData>\n ): FiltersColumn<TData> => {\n return {\n getAutoFilterFn: () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = 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 (typeof value === 'boolean') {\n return filterFns.equals\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 return isFunction(column.columnDef.filterFn)\n ? column.columnDef.filterFn\n : column.columnDef.filterFn === 'auto'\n ? column.getAutoFilterFn()\n : table.options.filterFns?.[column.columnDef.filterFn as string] ??\n filterFns[column.columnDef.filterFn as BuiltInFilterFn]\n },\n getCanFilter: () => {\n return (\n (column.columnDef.enableColumnFilter ?? true) &&\n (table.options.enableColumnFilters ?? true) &&\n (table.options.enableFilters ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanGlobalFilter: () => {\n return (\n (column.columnDef.enableGlobalFilter ?? true) &&\n (table.options.enableGlobalFilter ?? true) &&\n (table.options.enableFilters ?? true) &&\n (table.options.getColumnCanGlobalFilter?.(column) ?? true) &&\n !!column.accessorFn\n )\n },\n\n getIsFiltered: () => column.getFilterIndex() > -1,\n\n getFilterValue: () =>\n table.getState().columnFilters?.find(d => d.id === column.id)?.value,\n\n getFilterIndex: () =>\n table.getState().columnFilters?.findIndex(d => d.id === column.id) ??\n -1,\n\n setFilterValue: value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn()\n const previousfilter = old?.find(d => d.id === column.id)\n\n const newFilter = functionalUpdate(\n value,\n previousfilter ? previousfilter.value : undefined\n )\n\n //\n if (\n shouldAutoRemoveFilter(\n filterFn as FilterFn<TData>,\n newFilter,\n column\n )\n ) {\n return old?.filter(d => d.id !== column.id) ?? []\n }\n\n const newFilterObj = { id: column.id, value: newFilter }\n\n if (previousfilter) {\n return (\n old?.map(d => {\n if (d.id === column.id) {\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 _getFacetedRowModel:\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, column.id),\n getFacetedRowModel: () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return column._getFacetedRowModel()\n },\n _getFacetedUniqueValues:\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, column.id),\n getFacetedUniqueValues: () => {\n if (!column._getFacetedUniqueValues) {\n return new Map()\n }\n\n return column._getFacetedUniqueValues()\n },\n _getFacetedMinMaxValues:\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, column.id),\n getFacetedMinMaxValues: () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined\n }\n\n return column._getFacetedMinMaxValues()\n },\n // () => [column.getFacetedRowModel()],\n // facetedRowModel => getRowModelMinMaxValues(facetedRowModel, column.id),\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): FiltersRow<TData> => {\n return {\n columnFilters: {},\n columnFiltersMeta: {},\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): FiltersInstance<TData> => {\n return {\n getGlobalAutoFilterFn: () => {\n return filterFns.includesString\n },\n\n getGlobalFilterFn: () => {\n const { globalFilterFn: globalFilterFn } = table.options\n\n return isFunction(globalFilterFn)\n ? globalFilterFn\n : globalFilterFn === 'auto'\n ? table.getGlobalAutoFilterFn()\n : table.options.filterFns?.[globalFilterFn as string] ??\n filterFns[globalFilterFn as BuiltInFilterFn]\n },\n\n setColumnFilters: (updater: Updater<ColumnFiltersState>) => {\n const leafColumns = table.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 = column.getFilterFn()\n\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false\n }\n }\n\n return true\n })\n }\n\n table.options.onColumnFiltersChange?.(updateFn)\n },\n\n setGlobalFilter: updater => {\n table.options.onGlobalFilterChange?.(updater)\n },\n\n resetGlobalFilter: defaultState => {\n table.setGlobalFilter(\n defaultState ? undefined : table.initialState.globalFilter\n )\n },\n\n resetColumnFilters: defaultState => {\n table.setColumnFilters(\n defaultState ? [] : table.initialState?.columnFilters ?? []\n )\n },\n\n getPreFilteredRowModel: () => table.getCoreRowModel(),\n getFilteredRowModel: () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table)\n }\n\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getFilteredRowModel()\n },\n\n _getGlobalFacetedRowModel:\n table.options.getFacetedRowModel &&\n table.options.getFacetedRowModel(table, '__global__'),\n\n getGlobalFacetedRowModel: () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel()\n }\n\n return table._getGlobalFacetedRowModel()\n },\n\n _getGlobalFacetedUniqueValues:\n table.options.getFacetedUniqueValues &&\n table.options.getFacetedUniqueValues(table, '__global__'),\n getGlobalFacetedUniqueValues: () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map()\n }\n\n return table._getGlobalFacetedUniqueValues()\n },\n\n _getGlobalFacetedMinMaxValues:\n table.options.getFacetedMinMaxValues &&\n table.options.getFacetedMinMaxValues(table, '__global__'),\n getGlobalFacetedMinMaxValues: () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return\n }\n\n return table._getGlobalFacetedMinMaxValues()\n },\n }\n },\n}\n\nexport function shouldAutoRemoveFilter<TData extends RowData>(\n filterFn?: FilterFn<TData>,\n value?: any,\n column?: Column<TData, unknown>\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 { AggregationFn } from './features/Grouping'\n\nconst sum: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId)\n return sum + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\nconst min: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n\n if (\n value != null &&\n (min! > value || (min === undefined && value >= value))\n ) {\n min = value\n }\n })\n\n return min\n}\n\nconst max: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\n if (\n value != null &&\n (max! < value || (max === undefined && value >= value))\n ) {\n max = value\n }\n })\n\n return max\n}\n\nconst extent: AggregationFn<any> = (columnId, _leafRows, childRows) => {\n let min: number | undefined\n let max: number | undefined\n\n childRows.forEach(row => {\n const value = row.getValue<number>(columnId)\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\nconst mean: AggregationFn<any> = (columnId, leafRows) => {\n let count = 0\n let sum = 0\n\n leafRows.forEach(row => {\n let value = row.getValue<number>(columnId)\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\nconst median: AggregationFn<any> = (columnId, leafRows) => {\n if (!leafRows.length) {\n return\n }\n\n let min = 0\n let max = 0\n\n leafRows.forEach(row => {\n let value = row.getValue(columnId)\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\nconst unique: AggregationFn<any> = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values())\n}\n\nconst uniqueCount: AggregationFn<any> = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size\n}\n\nconst count: AggregationFn<any> = (_columnId, leafRows) => {\n return leafRows.length\n}\n\nexport const aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n","import { RowModel } from '..'\nimport { BuiltInAggregationFn, aggregationFns } from '../aggregationFns'\nimport { TableFeature } from '../core/table'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n ColumnDefTemplate,\n RowData,\n AggregationFns,\n} from '../types'\nimport { isFunction, makeStateUpdater } from '../utils'\n\nexport type GroupingState = string[]\n\nexport type GroupingTableState = {\n grouping: GroupingState\n}\n\nexport type AggregationFn<TData extends RowData> = (\n columnId: string,\n leafRows: Row<TData>[],\n childRows: Row<TData>[]\n) => any\n\nexport type CustomAggregationFns = Record<string, AggregationFn<any>>\n\nexport type AggregationFnOption<TData extends RowData> =\n | 'auto'\n | keyof AggregationFns\n | BuiltInAggregationFn\n | AggregationFn<TData>\n\nexport type GroupingColumnDef<TData extends RowData, TValue> = {\n aggregationFn?: AggregationFnOption<TData>\n aggregatedCell?: ColumnDefTemplate<\n ReturnType<Cell<TData, TValue>['getContext']>\n >\n enableGrouping?: boolean\n}\n\nexport type GroupingColumn<TData extends RowData> = {\n getCanGroup: () => boolean\n getIsGrouped: () => boolean\n getGroupedIndex: () => number\n toggleGrouping: () => void\n getToggleGroupingHandler: () => () => void\n getAutoAggregationFn: () => AggregationFn<TData> | undefined\n getAggregationFn: () => AggregationFn<TData> | undefined\n}\n\nexport type GroupingRow = {\n groupingColumnId?: string\n groupingValue?: unknown\n getIsGrouped: () => boolean\n _groupingValuesCache: Record<string, any>\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 enableGrouping: boolean\n}\n\nexport type GroupingOptions = {\n manualGrouping?: boolean\n onGroupingChange?: OnChangeFn<GroupingState>\n enableGrouping?: boolean\n getGroupedRowModel?: (table: Table<any>) => () => RowModel<any>\n groupedColumnMode?: false | 'reorder' | 'remove'\n} & (keyof AggregationFns extends never\n ? {\n aggregationFns?: Record<string, AggregationFn<any>>\n }\n : {\n aggregationFns: Record<keyof AggregationFns, AggregationFn<any>>\n })\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport type GroupingInstance<TData extends RowData> = {\n setGrouping: (updater: Updater<GroupingState>) => void\n resetGrouping: (defaultState?: boolean) => void\n getPreGroupedRowModel: () => RowModel<TData>\n getGroupedRowModel: () => RowModel<TData>\n _getGroupedRowModel?: () => RowModel<TData>\n}\n\n//\n\nexport const Grouping: TableFeature = {\n getDefaultColumnDef: <TData extends RowData>(): GroupingColumnDef<\n TData,\n unknown\n > => {\n return {\n aggregatedCell: props => (props.getValue() as any)?.toString?.() ?? null,\n aggregationFn: 'auto',\n }\n },\n\n getInitialState: (state): GroupingTableState => {\n return {\n grouping: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): GroupingOptions => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder',\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): GroupingColumn<TData> => {\n return {\n toggleGrouping: () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old?.includes(column.id)) {\n return old.filter(d => d !== column.id)\n }\n\n return [...(old ?? []), column.id]\n })\n },\n\n getCanGroup: () => {\n return (\n column.columnDef.enableGrouping ??\n true ??\n table.options.enableGrouping ??\n true ??\n !!column.accessorFn\n )\n },\n\n getIsGrouped: () => {\n return table.getState().grouping?.includes(column.id)\n },\n\n getGroupedIndex: () => table.getState().grouping?.indexOf(column.id),\n\n getToggleGroupingHandler: () => {\n const canGroup = column.getCanGroup()\n\n return () => {\n if (!canGroup) return\n column.toggleGrouping()\n }\n },\n getAutoAggregationFn: () => {\n const firstRow = table.getCoreRowModel().flatRows[0]\n\n const value = 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 getAggregationFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.aggregationFn)\n ? column.columnDef.aggregationFn\n : column.columnDef.aggregationFn === 'auto'\n ? column.getAutoAggregationFn()\n : table.options.aggregationFns?.[\n column.columnDef.aggregationFn as string\n ] ??\n aggregationFns[\n column.columnDef.aggregationFn as BuiltInAggregationFn\n ]\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): GroupingInstance<TData> => {\n return {\n setGrouping: updater => table.options.onGroupingChange?.(updater),\n\n resetGrouping: defaultState => {\n table.setGrouping(\n defaultState ? [] : table.initialState?.grouping ?? []\n )\n },\n\n getPreGroupedRowModel: () => table.getFilteredRowModel(),\n getGroupedRowModel: () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table)\n }\n\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel()\n }\n\n return table._getGroupedRowModel()\n },\n }\n },\n\n createRow: <TData extends RowData>(row: Row<TData>): GroupingRow => {\n return {\n getIsGrouped: () => !!row.groupingColumnId,\n _groupingValuesCache: {},\n }\n },\n\n createCell: <TData extends RowData, TValue>(\n cell: Cell<TData, TValue>,\n column: Column<TData, TValue>,\n row: Row<TData>,\n table: Table<TData>\n ): GroupingCell => {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\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,\n }\n },\n}\n\nexport function orderColumns<TData extends RowData>(\n leafColumns: Column<TData, unknown>[],\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 { makeStateUpdater, memo } from '../utils'\n\nimport { Table, OnChangeFn, Updater, Column, RowData } from '../types'\n\nimport { Grouping, orderColumns } from './Grouping'\nimport { TableFeature } from '../core/table'\n\nexport type ColumnOrderTableState = {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport type ColumnOrderOptions = {\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport type ColumnOrderDefaultOptions = {\n onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport type ColumnOrderInstance<TData extends RowData> = {\n setColumnOrder: (updater: Updater<ColumnOrderState>) => void\n resetColumnOrder: (defaultState?: boolean) => void\n _getOrderColumnsFn: () => (\n columns: Column<TData, unknown>[]\n ) => Column<TData, unknown>[]\n}\n\n//\n\nexport const Ordering: TableFeature = {\n getInitialState: (state): ColumnOrderTableState => {\n return {\n columnOrder: [],\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnOrderDefaultOptions => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ColumnOrderInstance<TData> => {\n return {\n setColumnOrder: updater => table.options.onColumnOrderChange?.(updater),\n resetColumnOrder: defaultState => {\n table.setColumnOrder(\n defaultState ? [] : table.initialState.columnOrder ?? []\n )\n },\n _getOrderColumnsFn: memo(\n () => [\n table.getState().columnOrder,\n table.getState().grouping,\n table.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<TData, unknown>[] = []\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 orderColumns(orderedColumns, grouping, groupedColumnMode)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getOrderColumnsFn',\n // debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, RowModel, Updater, RowData } from '../types'\nimport { functionalUpdate, makeStateUpdater, memo } from '../utils'\n\nexport type PaginationState = {\n pageIndex: number\n pageSize: number\n}\n\nexport type PaginationTableState = {\n pagination: PaginationState\n}\n\nexport type PaginationInitialTableState = {\n pagination?: Partial<PaginationState>\n}\n\nexport type PaginationOptions = {\n pageCount?: number\n manualPagination?: boolean\n onPaginationChange?: OnChangeFn<PaginationState>\n autoResetPageIndex?: boolean\n getPaginationRowModel?: (table: Table<any>) => () => RowModel<any>\n}\n\nexport type PaginationDefaultOptions = {\n onPaginationChange: OnChangeFn<PaginationState>\n}\n\nexport type PaginationInstance<TData extends RowData> = {\n _autoResetPageIndex: () => void\n setPagination: (updater: Updater<PaginationState>) => void\n resetPagination: (defaultState?: boolean) => void\n setPageIndex: (updater: Updater<number>) => void\n resetPageIndex: (defaultState?: boolean) => void\n setPageSize: (updater: Updater<number>) => void\n resetPageSize: (defaultState?: boolean) => void\n setPageCount: (updater: Updater<number>) => void\n getPageOptions: () => number[]\n getCanPreviousPage: () => boolean\n getCanNextPage: () => boolean\n previousPage: () => void\n nextPage: () => void\n getPrePaginationRowModel: () => RowModel<TData>\n getPaginationRowModel: () => RowModel<TData>\n _getPaginationRowModel?: () => RowModel<TData>\n getPageCount: () => number\n}\n\n//\n\nconst defaultPageIndex = 0\nconst defaultPageSize = 10\n\nconst getDefaultPaginationState = (): PaginationState => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize,\n})\n\nexport const Pagination: TableFeature = {\n getInitialState: (state): PaginationTableState => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...state?.pagination,\n },\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): PaginationDefaultOptions => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): PaginationInstance<TData> => {\n let registered = false\n let queued = false\n\n return {\n _autoResetPageIndex: () => {\n if (!registered) {\n table._queue(() => {\n registered = true\n })\n return\n }\n\n if (\n table.options.autoResetAll ??\n table.options.autoResetPageIndex ??\n !table.options.manualPagination\n ) {\n if (queued) return\n queued = true\n table._queue(() => {\n table.resetPageIndex()\n queued = false\n })\n }\n },\n setPagination: updater => {\n const safeUpdater: Updater<PaginationState> = old => {\n let newState = functionalUpdate(updater, old)\n\n return newState\n }\n\n return table.options.onPaginationChange?.(safeUpdater)\n },\n resetPagination: defaultState => {\n table.setPagination(\n defaultState\n ? getDefaultPaginationState()\n : table.initialState.pagination ?? getDefaultPaginationState()\n )\n },\n setPageIndex: updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex)\n\n const maxPageIndex =\n typeof table.options.pageCount === 'undefined' ||\n table.options.pageCount === -1\n ? Number.MAX_SAFE_INTEGER\n : table.options.pageCount - 1\n\n pageIndex = Math.min(Math.max(0, pageIndex), maxPageIndex)\n\n return {\n ...old,\n pageIndex,\n }\n })\n },\n resetPageIndex: defaultState => {\n table.setPageIndex(\n defaultState\n ? defaultPageIndex\n : table.initialState?.pagination?.pageIndex ?? defaultPageIndex\n )\n },\n resetPageSize: defaultState => {\n table.setPageSize(\n defaultState\n ? defaultPageSize\n : table.initialState?.pagination?.pageSize ?? defaultPageSize\n )\n },\n setPageSize: updater => {\n table.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 table.setPagination(old => {\n let newPageCount = functionalUpdate(\n updater,\n table.options.pageCount ?? -1\n )\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 () => [table.getPageCount()],\n 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: process.env.NODE_ENV === 'development' && 'getPageOptions',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getCanPreviousPage: () => table.getState().pagination.pageIndex > 0,\n\n getCanNextPage: () => {\n const { pageIndex } = table.getState().pagination\n\n const pageCount = table.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\n previousPage: () => {\n return table.setPageIndex(old => old - 1)\n },\n\n nextPage: () => {\n return table.setPageIndex(old => {\n return old + 1\n })\n },\n\n getPrePaginationRowModel: () => table.getExpandedRowModel(),\n getPaginationRowModel: () => {\n if (\n !table._getPaginationRowModel &&\n table.options.getPaginationRowModel\n ) {\n table._getPaginationRowModel =\n table.options.getPaginationRowModel(table)\n }\n\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel()\n }\n\n return table._getPaginationRowModel()\n },\n\n getPageCount: () => {\n return (\n table.options.pageCount ??\n Math.ceil(\n table.getPrePaginationRowModel().rows.length /\n table.getState().pagination.pageSize\n )\n )\n },\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport {\n OnChangeFn,\n Updater,\n Table,\n Column,\n Row,\n Cell,\n RowData,\n} from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type 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}\n\nexport type ColumnPinningColumn = {\n getCanPin: () => boolean\n getPinnedIndex: () => number\n getIsPinned: () => ColumnPinningPosition\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport type ColumnPinningRow<TData extends RowData> = {\n getLeftVisibleCells: () => Cell<TData, unknown>[]\n getCenterVisibleCells: () => Cell<TData, unknown>[]\n getRightVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport type ColumnPinningInstance<TData extends RowData> = {\n setColumnPinning: (updater: Updater<ColumnPinningState>) => void\n resetColumnPinning: (defaultState?: boolean) => void\n getIsSomeColumnsPinned: (position?: ColumnPinningPosition) => boolean\n getLeftLeafColumns: () => Column<TData, unknown>[]\n getRightLeafColumns: () => Column<TData, unknown>[]\n getCenterLeafColumns: () => Column<TData, unknown>[]\n}\n\n//\n\nconst getDefaultPinningState = (): ColumnPinningState => ({\n left: [],\n right: [],\n})\n\nexport const Pinning: TableFeature = {\n getInitialState: (state): ColumnPinningTableState => {\n return {\n columnPinning: getDefaultPinningState(),\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): ColumnPinningDefaultOptions => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): ColumnPinningColumn => {\n return {\n pin: position => {\n const columnIds = column\n .getLeafColumns()\n .map(d => d.id)\n .filter(Boolean) as string[]\n\n table.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 getCanPin: () => {\n const leafColumns = column.getLeafColumns()\n\n return leafColumns.some(\n d =>\n (d.columnDef.enablePinning ?? true) &&\n (table.options.enablePinning ?? true)\n )\n },\n\n getIsPinned: () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id)\n\n const { left, right } = table.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 getPinnedIndex: () => {\n const position = column.getIsPinned()\n\n return position\n ? table.getState().columnPinning?.[position]?.indexOf(column.id) ?? -1\n : 0\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): ColumnPinningRow<TData> => {\n return {\n getCenterVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allCells, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allCells.filter(d => !leftAndRight.includes(d.column.id))\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'row.getCenterVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getLeftVisibleCells: memo(\n () => [\n row._getAllVisibleCells(),\n table.getState().columnPinning.left,\n ,\n ],\n (allCells, left) => {\n const cells = (left ?? [])\n .map(\n columnId => allCells.find(cell => cell.column.id === columnId)!\n )\n .filter(Boolean)\n .map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))\n\n return cells\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getLeftVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getRightVisibleCells: memo(\n () => [row._getAllVisibleCells(), table.getState().columnPinning.right],\n (allCells, right) => {\n const cells = (right ?? [])\n .map(\n columnId => allCells.find(cell => cell.column.id === columnId)!\n )\n .filter(Boolean)\n .map(d => ({ ...d, position: 'left' } as Cell<TData, unknown>))\n\n return cells\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getRightVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): ColumnPinningInstance<TData> => {\n return {\n setColumnPinning: updater =>\n table.options.onColumnPinningChange?.(updater),\n\n resetColumnPinning: defaultState =>\n table.setColumnPinning(\n defaultState\n ? getDefaultPinningState()\n : table.initialState?.columnPinning ?? getDefaultPinningState()\n ),\n\n getIsSomeColumnsPinned: position => {\n const pinningState = table.getState().columnPinning\n\n if (!position) {\n return Boolean(\n pinningState.left?.length || pinningState.right?.length\n )\n }\n return Boolean(pinningState[position]?.length)\n },\n\n getLeftLeafColumns: memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.left],\n (allColumns, left) => {\n return (left ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getLeftLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getRightLeafColumns: memo(\n () => [table.getAllLeafColumns(), table.getState().columnPinning.right],\n (allColumns, right) => {\n return (right ?? [])\n .map(columnId => allColumns.find(column => column.id === columnId)!)\n .filter(Boolean)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRightLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getCenterLeafColumns: memo(\n () => [\n table.getAllLeafColumns(),\n table.getState().columnPinning.left,\n table.getState().columnPinning.right,\n ],\n (allColumns, left, right) => {\n const leftAndRight: string[] = [...(left ?? []), ...(right ?? [])]\n\n return allColumns.filter(d => !leftAndRight.includes(d.id))\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getCenterLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport { OnChangeFn, Table, Row, RowModel, Updater, RowData } from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type RowSelectionState = Record<string, boolean>\n\nexport type RowSelectionTableState = {\n rowSelection: RowSelectionState\n}\n\nexport type RowSelectionOptions<TData extends RowData> = {\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean)\n enableMultiRowSelection?: boolean | ((row: Row<TData>) => boolean)\n enableSubRowSelection?: boolean | ((row: Row<TData>) => boolean)\n onRowSelectionChange?: OnChangeFn<RowSelectionState>\n // enableGroupingRowSelection?:\n // | boolean\n // | ((\n // row: Row<TData>\n // ) => boolean)\n // isAdditiveSelectEvent?: (e: unknown) => boolean\n // isInclusiveSelectEvent?: (e: unknown) => boolean\n // selectRowsFn?: (\n // table: Table<TData>,\n // rowModel: RowModel<TData>\n // ) => RowModel<TData>\n}\n\nexport type RowSelectionRow = {\n getIsSelected: () => boolean\n getIsSomeSelected: () => boolean\n getIsAllSubRowsSelected: () => boolean\n getCanSelect: () => boolean\n getCanMultiSelect: () => boolean\n getCanSelectSubRows: () => boolean\n toggleSelected: (value?: boolean) => void\n getToggleSelectedHandler: () => (event: unknown) => void\n}\n\nexport type RowSelectionInstance<TData extends RowData> = {\n getToggleAllRowsSelectedHandler: () => (event: unknown) => void\n getToggleAllPageRowsSelectedHandler: () => (event: unknown) => void\n setRowSelection: (updater: Updater<RowSelectionState>) => void\n resetRowSelection: (defaultState?: boolean) => void\n getIsAllRowsSelected: () => boolean\n getIsAllPageRowsSelected: () => boolean\n getIsSomeRowsSelected: () => boolean\n getIsSomePageRowsSelected: () => boolean\n toggleAllRowsSelected: (value?: boolean) => void\n toggleAllPageRowsSelected: (value?: boolean) => void\n getPreSelectedRowModel: () => RowModel<TData>\n getSelectedRowModel: () => RowModel<TData>\n getFilteredSelectedRowModel: () => RowModel<TData>\n getGroupedSelectedRowModel: () => RowModel<TData>\n}\n\n//\n\nexport const RowSelection: TableFeature = {\n getInitialState: (state): RowSelectionTableState => {\n return {\n rowSelection: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): RowSelectionOptions<TData> => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true,\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): RowSelectionInstance<TData> => {\n return {\n setRowSelection: updater => table.options.onRowSelectionChange?.(updater),\n resetRowSelection: defaultState =>\n table.setRowSelection(\n defaultState ? {} : table.initialState.rowSelection ?? {}\n ),\n toggleAllRowsSelected: value => {\n table.setRowSelection(old => {\n value =\n typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected()\n\n const rowSelection = { ...old }\n\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows\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 if (!row.getCanSelect()) {\n return\n }\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 table.setRowSelection(old => {\n const resolvedValue =\n typeof value !== 'undefined'\n ? value\n : !table.getIsAllPageRowsSelected()\n\n const rowSelection: RowSelectionState = { ...old }\n\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, table)\n })\n\n return rowSelection\n }),\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\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 // table.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 // table.setRowSelection(selectedRowIds)\n // },\n getPreSelectedRowModel: () => table.getCoreRowModel(),\n getSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getCoreRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getFilteredSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getFilteredRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'getFilteredSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n getGroupedSelectedRowModel: memo(\n () => [table.getState().rowSelection, table.getSortedRowModel()],\n (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n }\n\n return selectRowsFn(table, rowModel)\n },\n {\n key:\n process.env.NODE_ENV === 'production' &&\n 'getGroupedSelectedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n ),\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n getIsAllRowsSelected: () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows\n const { rowSelection } = table.getState()\n\n let isAllRowsSelected = Boolean(\n preGroupedFlatRows.length && Object.keys(rowSelection).length\n )\n\n if (isAllRowsSelected) {\n if (\n preGroupedFlatRows.some(\n row => row.getCanSelect() && !rowSelection[row.id]\n )\n ) {\n isAllRowsSelected = false\n }\n }\n\n return isAllRowsSelected\n },\n\n getIsAllPageRowsSelected: () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n const { rowSelection } = table.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 const totalSelected = Object.keys(\n table.getState().rowSelection ?? {}\n ).length\n return (\n totalSelected > 0 &&\n totalSelected < table.getFilteredRowModel().flatRows.length\n )\n },\n\n getIsSomePageRowsSelected: () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows\n return table.getIsAllPageRowsSelected()\n ? false\n : paginationFlatRows.some(\n d => d.getIsSelected() || d.getIsSomeSelected()\n )\n },\n\n getToggleAllRowsSelectedHandler: () => {\n return (e: unknown) => {\n table.toggleAllRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n\n getToggleAllPageRowsSelectedHandler: () => {\n return (e: unknown) => {\n table.toggleAllPageRowsSelected(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): RowSelectionRow => {\n return {\n toggleSelected: value => {\n const isSelected = row.getIsSelected()\n\n table.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, table)\n\n return selectedRowIds\n })\n },\n getIsSelected: () => {\n const { rowSelection } = table.getState()\n return isRowSelected(row, rowSelection)\n },\n\n getIsSomeSelected: () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'some'\n },\n\n getIsAllSubRowsSelected: () => {\n const { rowSelection } = table.getState()\n return isSubRowSelected(row, rowSelection, table) === 'all'\n },\n\n getCanSelect: () => {\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row)\n }\n\n return table.options.enableRowSelection ?? true\n },\n\n getCanSelectSubRows: () => {\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row)\n }\n\n return table.options.enableSubRowSelection ?? true\n },\n\n getCanMultiSelect: () => {\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row)\n }\n\n return table.options.enableMultiRowSelection ?? true\n },\n getToggleSelectedHandler: () => {\n const canSelect = row.getCanSelect()\n\n return (e: unknown) => {\n if (!canSelect) return\n row.toggleSelected(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n },\n }\n },\n}\n\nconst mutateRowIsSelected = <TData extends RowData>(\n selectedRowIds: Record<string, boolean>,\n id: string,\n value: boolean,\n table: Table<TData>\n) => {\n const row = table.getRow(id)\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key])\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true\n }\n } else {\n delete selectedRowIds[id]\n }\n // }\n\n if (row.subRows?.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row =>\n mutateRowIsSelected(selectedRowIds, row.id, value, table)\n )\n }\n}\n\nexport function selectRowsFn<TData extends RowData>(\n table: Table<TData>,\n rowModel: RowModel<TData>\n): RowModel<TData> {\n const rowSelection = table.getState().rowSelection\n\n const newSelectedFlatRows: Row<TData>[] = []\n const newSelectedRowsById: Record<string, Row<TData>> = {}\n\n // Filters top level and nested rows\n const recurseRows = (rows: Row<TData>[], depth = 0): Row<TData>[] => {\n return rows\n .map(row => {\n const isSelected = isRowSelected(row, rowSelection)\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<TData>[]\n }\n\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById,\n }\n}\n\nexport function isRowSelected<TData extends RowData>(\n row: Row<TData>,\n selection: Record<string, boolean>\n): boolean {\n return selection[row.id] ?? false\n}\n\nexport function isSubRowSelected<TData extends RowData>(\n row: Row<TData>,\n selection: Record<string, boolean>,\n table: Table<TData>\n): boolean | 'some' | 'all' {\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)) {\n someSelected = true\n } else {\n allChildrenSelected = false\n }\n })\n\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false\n }\n\n return false\n}\n","import { SortingFn } from './features/Sorting'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nconst alphanumeric: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\nconst alphanumericCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase()\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId))\n )\n}\n\nconst datetime: SortingFn<any> = (rowA, rowB, columnId) => {\n const a = rowA.getValue<Date>(columnId)\n const b = rowB.getValue<Date>(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nconst basic: SortingFn<any> = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(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\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// Exports\n\nexport const sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic,\n}\n\nexport type BuiltInSortingFn = keyof typeof sortingFns\n","import { RowModel } from '..'\nimport { TableFeature } from '../core/table'\nimport {\n BuiltInSortingFn,\n reSplitAlphaNumeric,\n sortingFns,\n} from '../sortingFns'\n\nimport {\n Column,\n OnChangeFn,\n Table,\n Row,\n Updater,\n RowData,\n SortingFns,\n} from '../types'\n\nimport { isFunction, makeStateUpdater } 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 SortingTableState = {\n sorting: SortingState\n}\n\nexport type SortingFn<TData extends RowData> = {\n (rowA: Row<TData>, rowB: Row<TData>, columnId: string): number\n}\n\nexport type CustomSortingFns<TData extends RowData> = Record<\n string,\n SortingFn<TData>\n>\n\nexport type SortingFnOption<TData extends RowData> =\n | 'auto'\n | keyof SortingFns\n | BuiltInSortingFn\n | SortingFn<TData>\n\nexport type SortingColumnDef<TData extends RowData> = {\n sortingFn?: SortingFnOption<TData>\n sortDescFirst?: boolean\n enableSorting?: boolean\n enableMultiSort?: boolean\n invertSorting?: boolean\n sortUndefined?: false | -1 | 1\n}\n\nexport type SortingColumn<TData extends RowData> = {\n getAutoSortingFn: () => SortingFn<TData>\n getAutoSortDir: () => SortDirection\n getSortingFn: () => SortingFn<TData>\n getFirstSortDir: () => SortDirection\n getNextSortingOrder: () => SortDirection | false\n getCanSort: () => boolean\n getCanMultiSort: () => boolean\n getSortIndex: () => number\n getIsSorted: () => false | SortDirection\n clearSorting: () => void\n toggleSorting: (desc?: boolean, isMulti?: boolean) => void\n getToggleSortingHandler: () => undefined | ((event: unknown) => void)\n}\n\nexport type SortingOptions<TData extends RowData> = {\n manualSorting?: boolean\n onSortingChange?: OnChangeFn<SortingState>\n enableSorting?: boolean\n enableSortingRemoval?: boolean\n enableMultiRemove?: boolean\n enableMultiSort?: boolean\n sortDescFirst?: boolean\n getSortedRowModel?: (table: Table<any>) => () => RowModel<any>\n maxMultiSortColCount?: number\n isMultiSortEvent?: (e: unknown) => boolean\n} & (keyof SortingFns extends never\n ? {\n sortingFns?: Record<string, SortingFn<any>>\n }\n : {\n sortingFns: Record<keyof SortingFns, SortingFn<any>>\n })\n\nexport type SortingInstance<TData extends RowData> = {\n setSorting: (updater: Updater<SortingState>) => void\n resetSorting: (defaultState?: boolean) => void\n getPreSortedRowModel: () => RowModel<TData>\n getSortedRowModel: () => RowModel<TData>\n _getSortedRowModel?: () => RowModel<TData>\n}\n\n//\n\nexport const Sorting: TableFeature = {\n getInitialState: (state): SortingTableState => {\n return {\n sorting: [],\n ...state,\n }\n },\n\n getDefaultColumnDef: <TData extends RowData>(): SortingColumnDef<TData> => {\n return {\n sortingFn: 'auto',\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): SortingOptions<TData> => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: (e: unknown) => {\n return (e as MouseEvent).shiftKey\n },\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): SortingColumn<TData> => {\n return {\n getAutoSortingFn: () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (const row of firstRows) {\n const value = 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 = table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow?.getValue(column.id)\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n },\n getSortingFn: () => {\n if (!column) {\n throw new Error()\n }\n\n return isFunction(column.columnDef.sortingFn)\n ? column.columnDef.sortingFn\n : column.columnDef.sortingFn === 'auto'\n ? column.getAutoSortingFn()\n : table.options.sortingFns?.[column.columnDef.sortingFn as string] ??\n sortingFns[column.columnDef.sortingFn as BuiltInSortingFn]\n },\n toggleSorting: (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder()\n const hasManualValue = typeof desc !== 'undefined' && desc !== null\n\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old?.find(d => d.id === column.id)\n const existingIndex = old?.findIndex(d => d.id === column.id)\n\n let newSorting: SortingState = []\n\n // What should we do with this sort action?\n let sortAction: 'add' | 'remove' | 'toggle' | 'replace'\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old?.length && 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 // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove'\n }\n }\n }\n\n if (sortAction === 'add') {\n newSorting = [\n ...old,\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n // Take latest n columns\n newSorting.splice(\n 0,\n newSorting.length -\n (table.options.maxMultiSortColCount ?? Number.MAX_SAFE_INTEGER)\n )\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc,\n }\n }\n return d\n })\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id)\n } else {\n newSorting = [\n {\n id: column.id,\n desc: nextDesc,\n },\n ]\n }\n\n return newSorting\n })\n },\n\n getFirstSortDir: () => {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n table.options.sortDescFirst ??\n column.getAutoSortDir() === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n },\n\n getNextSortingOrder: (multi?: boolean) => {\n const firstSortDirection = column.getFirstSortDir()\n const isSorted = column.getIsSorted()\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? table.options.enableMultiRemove ?? true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false\n }\n return isSorted === 'desc' ? 'asc' : 'desc'\n },\n\n getCanSort: () => {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n },\n\n getCanMultiSort: () => {\n return (\n column.columnDef.enableMultiSort ??\n table.options.enableMultiSort ??\n !!column.accessorFn\n )\n },\n\n getIsSorted: () => {\n const columnSort = table\n .getState()\n .sorting?.find(d => d.id === column.id)\n\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n },\n\n getSortIndex: () =>\n table.getState().sorting?.findIndex(d => d.id === column.id) ?? -1,\n\n clearSorting: () => {\n //clear sorting for just 1 column\n table.setSorting(old =>\n old?.length ? old.filter(d => d.id !== column.id) : []\n )\n },\n\n getToggleSortingHandler: () => {\n const canSort = column.getCanSort()\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column.toggleSorting?.(\n undefined,\n column.getCanMultiSort()\n ? table.options.isMultiSortEvent?.(e)\n : false\n )\n }\n },\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): SortingInstance<TData> => {\n return {\n setSorting: updater => table.options.onSortingChange?.(updater),\n resetSorting: defaultState => {\n table.setSorting(defaultState ? [] : table.initialState?.sorting ?? [])\n },\n getPreSortedRowModel: () => table.getGroupedRowModel(),\n getSortedRowModel: () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table)\n }\n\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel()\n }\n\n return table._getSortedRowModel()\n },\n }\n },\n}\n","import { TableFeature } from '../core/table'\nimport {\n Cell,\n Column,\n OnChangeFn,\n Table,\n Updater,\n Row,\n RowData,\n} from '../types'\nimport { makeStateUpdater, memo } from '../utils'\n\nexport type VisibilityState = Record<string, boolean>\n\nexport type VisibilityTableState = {\n columnVisibility: VisibilityState\n}\n\nexport type VisibilityOptions = {\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n enableHiding?: boolean\n}\n\nexport type VisibilityDefaultOptions = {\n onColumnVisibilityChange: OnChangeFn<VisibilityState>\n}\n\nexport type VisibilityInstance<TData extends RowData> = {\n getVisibleFlatColumns: () => Column<TData, unknown>[]\n getVisibleLeafColumns: () => Column<TData, unknown>[]\n getLeftVisibleLeafColumns: () => Column<TData, unknown>[]\n getRightVisibleLeafColumns: () => Column<TData, unknown>[]\n getCenterVisibleLeafColumns: () => Column<TData, unknown>[]\n setColumnVisibility: (updater: Updater<VisibilityState>) => void\n resetColumnVisibility: (defaultState?: boolean) => void\n toggleAllColumnsVisible: (value?: boolean) => void\n getIsAllColumnsVisible: () => boolean\n getIsSomeColumnsVisible: () => boolean\n getToggleAllColumnsVisibilityHandler: () => (event: unknown) => void\n}\n\nexport type VisibilityColumnDef = {\n enableHiding?: boolean\n}\n\nexport type VisibilityRow<TData extends RowData> = {\n _getAllVisibleCells: () => Cell<TData, unknown>[]\n getVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport type VisibilityColumn = {\n getCanHide: () => boolean\n getIsVisible: () => boolean\n toggleVisibility: (value?: boolean) => void\n getToggleVisibilityHandler: () => (event: unknown) => void\n}\n\n//\n\nexport const Visibility: TableFeature = {\n getInitialState: (state): VisibilityTableState => {\n return {\n columnVisibility: {},\n ...state,\n }\n },\n\n getDefaultOptions: <TData extends RowData>(\n table: Table<TData>\n ): VisibilityDefaultOptions => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table),\n }\n },\n\n createColumn: <TData extends RowData, TValue>(\n column: Column<TData, TValue>,\n table: Table<TData>\n ): VisibilityColumn => {\n return {\n toggleVisibility: value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value ?? !column.getIsVisible(),\n }))\n }\n },\n getIsVisible: () => {\n return table.getState().columnVisibility?.[column.id] ?? true\n },\n\n getCanHide: () => {\n return (\n (column.columnDef.enableHiding ?? true) &&\n (table.options.enableHiding ?? true)\n )\n },\n getToggleVisibilityHandler: () => {\n return (e: unknown) => {\n column.toggleVisibility?.(\n ((e as MouseEvent).target as HTMLInputElement).checked\n )\n }\n },\n }\n },\n\n createRow: <TData extends RowData>(\n row: Row<TData>,\n table: Table<TData>\n ): VisibilityRow<TData> => {\n return {\n _getAllVisibleCells: memo(\n () => [row.getAllCells(), table.getState().columnVisibility],\n cells => {\n return cells.filter(cell => cell.column.getIsVisible())\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row._getAllVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n getVisibleCells: memo(\n () => [\n row.getLeftVisibleCells(),\n row.getCenterVisibleCells(),\n row.getRightVisibleCells(),\n ],\n (left, center, right) => [...left, ...center, ...right],\n {\n key: process.env.NODE_ENV === 'development' && 'row.getVisibleCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n },\n\n createTable: <TData extends RowData>(\n table: Table<TData>\n ): VisibilityInstance<TData> => {\n const makeVisibleColumnsMethod = (\n key: string,\n getColumns: () => Column<TData, unknown>[]\n ): (() => Column<TData, unknown>[]) => {\n return memo(\n () => [\n getColumns(),\n getColumns()\n .filter(d => d.getIsVisible())\n .map(d => d.id)\n .join('_'),\n ],\n columns => {\n return columns.filter(d => d.getIsVisible?.())\n },\n {\n key,\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n )\n }\n\n return {\n getVisibleFlatColumns: makeVisibleColumnsMethod(\n 'getVisibleFlatColumns',\n () => table.getAllFlatColumns()\n ),\n getVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getVisibleLeafColumns',\n () => table.getAllLeafColumns()\n ),\n getLeftVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getLeftVisibleLeafColumns',\n () => table.getLeftLeafColumns()\n ),\n getRightVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getRightVisibleLeafColumns',\n () => table.getRightLeafColumns()\n ),\n getCenterVisibleLeafColumns: makeVisibleColumnsMethod(\n 'getCenterVisibleLeafColumns',\n () => table.getCenterLeafColumns()\n ),\n\n setColumnVisibility: updater =>\n table.options.onColumnVisibilityChange?.(updater),\n\n resetColumnVisibility: defaultState => {\n table.setColumnVisibility(\n defaultState ? {} : table.initialState.columnVisibility ?? {}\n )\n },\n\n toggleAllColumnsVisible: value => {\n value = value ?? !table.getIsAllColumnsVisible()\n\n table.setColumnVisibility(\n table.getAllLeafColumns().reduce(\n (obj, column) => ({\n ...obj,\n [column.id]: !value ? !column.getCanHide?.() : value,\n }),\n {}\n )\n )\n },\n\n getIsAllColumnsVisible: () =>\n !table.getAllLeafColumns().some(column => !column.getIsVisible?.()),\n\n getIsSomeColumnsVisible: () =>\n table.getAllLeafColumns().some(column => column.getIsVisible?.()),\n\n getToggleAllColumnsVisibilityHandler: () => {\n return (e: unknown) => {\n table.toggleAllColumnsVisible(\n ((e as MouseEvent).target as HTMLInputElement)?.checked\n )\n }\n },\n }\n },\n}\n","import { flattenBy, functionalUpdate, memo, RequiredKeys } from '../utils'\n\nimport {\n Updater,\n TableOptionsResolved,\n TableState,\n Table,\n ColumnDefTemplate,\n InitialTableState,\n Row,\n Column,\n RowModel,\n ColumnDef,\n TableOptions,\n RowData,\n TableMeta,\n ColumnDefResolved,\n GroupColumnDef,\n} from '../types'\n\n//\nimport { createColumn } from './column'\nimport { Headers } from './headers'\n//\n\nimport { ColumnSizing } from '../features/ColumnSizing'\nimport { Expanding } from '../features/Expanding'\nimport { Filters } from '../features/Filters'\nimport { Grouping, GroupingColumnDef } from '../features/Grouping'\nimport { Ordering } from '../features/Ordering'\nimport { Pagination } from '../features/Pagination'\nimport { Pinning } from '../features/Pinning'\nimport { RowSelection } from '../features/RowSelection'\nimport { Sorting } from '../features/Sorting'\nimport { Visibility } from '../features/Visibility'\n\nexport type TableFeature = {\n getDefaultOptions?: (table: any) => any\n getInitialState?: (initialState?: InitialTableState) => any\n createTable?: (table: any) => any\n getDefaultColumnDef?: () => any\n createColumn?: (column: any, table: any) => any\n createHeader?: (column: any, table: any) => any\n createCell?: (cell: any, column: any, row: any, table: any) => any\n createRow?: (row: any, table: any) => any\n}\n\nconst features = [\n Headers,\n Visibility,\n Ordering,\n Pinning,\n Filters,\n Sorting,\n Grouping,\n Expanding,\n Pagination,\n RowSelection,\n ColumnSizing,\n] as const\n\n//\n\nexport type CoreTableState = {}\n\nexport type CoreOptions<TData extends RowData> = {\n data: TData[]\n state: Partial<TableState>\n onStateChange: (updater: Updater<TableState>) => void\n debugAll?: boolean\n debugTable?: boolean\n debugHeaders?: boolean\n debugColumns?: boolean\n debugRows?: boolean\n initialState?: InitialTableState\n autoResetAll?: boolean\n mergeOptions?: (\n defaultOptions: TableOptions<TData>,\n options: Partial<TableOptions<TData>>\n ) => TableOptions<TData>\n meta?: TableMeta<TData>\n getCoreRowModel: (table: Table<any>) => () => RowModel<any>\n getSubRows?: (originalRow: TData, index: number) => undefined | TData[]\n getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string\n columns: ColumnDef<TData, any>[]\n defaultColumn?: Partial<ColumnDef<TData, unknown>>\n renderFallbackValue: any\n}\n\nexport type CoreInstance<TData extends RowData> = {\n initialState: TableState\n reset: () => void\n options: RequiredKeys<TableOptionsResolved<TData>, 'state'>\n setOptions: (newOptions: Updater<TableOptionsResolved<TData>>) => void\n getState: () => TableState\n setState: (updater: Updater<TableState>) => void\n _features: readonly TableFeature[]\n _queue: (cb: () => void) => void\n _getRowId: (_: TData, index: number, parent?: Row<TData>) => string\n getCoreRowModel: () => RowModel<TData>\n _getCoreRowModel?: () => RowModel<TData>\n getRowModel: () => RowModel<TData>\n getRow: (id: string) => Row<TData>\n _getDefaultColumnDef: () => Partial<ColumnDef<TData, unknown>>\n _getColumnDefs: () => ColumnDef<TData, unknown>[]\n _getAllFlatColumnsById: () => Record<string, Column<TData, unknown>>\n getAllColumns: () => Column<TData, unknown>[]\n getAllFlatColumns: () => Column<TData, unknown>[]\n getAllLeafColumns: () => Column<TData, unknown>[]\n getColumn: (columnId: string) => Column<TData, unknown>\n}\n\nexport function createTable<TData extends RowData>(\n options: TableOptionsResolved<TData>\n): Table<TData> {\n if (options.debugAll || options.debugTable) {\n console.info('Creating Table Instance...')\n }\n\n let table = { _features: features } as unknown as Table<TData>\n\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions?.(table))\n }, {}) as TableOptionsResolved<TData>\n\n const mergeOptions = (options: TableOptionsResolved<TData>) => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options)\n }\n\n return {\n ...defaultOptions,\n ...options,\n }\n }\n\n const coreInitialState: CoreTableState = {}\n\n let initialState = {\n ...coreInitialState,\n ...(options.initialState ?? {}),\n } as TableState\n\n table._features.forEach(feature => {\n initialState = feature.getInitialState?.(initialState) ?? initialState\n })\n\n const queued: (() => void)[] = []\n let queuedTimeout = false\n\n const coreInstance: CoreInstance<TData> = {\n _features: features,\n options: {\n ...defaultOptions,\n ...options,\n },\n initialState,\n _queue: cb => {\n queued.push(cb)\n\n if (!queuedTimeout) {\n queuedTimeout = true\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve()\n .then(() => {\n while (queued.length) {\n queued.shift()!()\n }\n queuedTimeout = false\n })\n .catch(error =>\n setTimeout(() => {\n throw error\n })\n )\n }\n },\n reset: () => {\n table.setState(table.initialState)\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options)\n table.options = mergeOptions(newOptions) as RequiredKeys<\n TableOptionsResolved<TData>,\n 'state'\n >\n },\n\n getState: () => {\n return table.options.state as TableState\n },\n\n setState: (updater: Updater<TableState>) => {\n table.options.onStateChange?.(updater)\n },\n\n _getRowId: (row: TData, index: number, parent?: Row<TData>) =>\n table.options.getRowId?.(row, index, parent) ??\n `${parent ? [parent.id, index].join('.') : index}`,\n\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table)\n }\n\n return table._getCoreRowModel!()\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 table.getPaginationRowModel()\n },\n getRow: (id: string) => {\n const row = table.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 throw new Error()\n }\n\n return row\n },\n _getDefaultColumnDef: memo(\n () => [table.options.defaultColumn],\n defaultColumn => {\n defaultColumn = (defaultColumn ?? {}) as Partial<\n ColumnDef<TData, unknown>\n >\n\n return {\n header: props => {\n const resolvedColumnDef = props.header.column\n .columnDef as ColumnDefResolved<TData>\n\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey\n }\n\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id\n }\n\n return null\n },\n // footer: props => props.header.column.id,\n cell: props => props.renderValue<any>()?.toString?.() ?? null,\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef?.())\n }, {}),\n ...defaultColumn,\n } as Partial<ColumnDef<TData, unknown>>\n },\n {\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n key: process.env.NODE_ENV === 'development' && 'getDefaultColumnDef',\n }\n ),\n\n _getColumnDefs: () => table.options.columns,\n\n getAllColumns: memo(\n () => [table._getColumnDefs()],\n columnDefs => {\n const recurseColumns = (\n columnDefs: ColumnDef<TData, unknown>[],\n parent?: Column<TData, unknown>,\n depth = 0\n ): Column<TData, unknown>[] => {\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent)\n\n const groupingColumnDef = columnDef as GroupColumnDef<\n TData,\n unknown\n >\n\n column.columns = groupingColumnDef.columns\n ? recurseColumns(groupingColumnDef.columns, column, depth + 1)\n : []\n\n return column\n })\n }\n\n return recurseColumns(columnDefs)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getAllFlatColumns: memo(\n () => [table.getAllColumns()],\n allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns()\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n _getAllFlatColumnsById: memo(\n () => [table.getAllFlatColumns()],\n flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column\n return acc\n }, {} as Record<string, Column<TData, unknown>>)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllFlatColumnsById',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getAllLeafColumns: memo(\n () => [table.getAllColumns(), table._getOrderColumnsFn()],\n (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns())\n return orderColumns(leafColumns)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getAllLeafColumns',\n debug: () => table.options.debugAll ?? table.options.debugColumns,\n }\n ),\n\n getColumn: columnId => {\n const column = table._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 throw new Error()\n }\n\n return column\n },\n }\n\n Object.assign(table, coreInstance)\n\n table._features.forEach(feature => {\n return Object.assign(table, feature.createTable?.(table))\n })\n\n return table\n}\n","import { RowData, Cell, Column, Row, Table } from '../types'\nimport { Getter, memo } from '../utils'\n\nexport type CellContext<TData extends RowData, TValue> = {\n table: Table<TData>\n column: Column<TData, TValue>\n row: Row<TData>\n cell: Cell<TData, TValue>\n getValue: Getter<TValue>\n renderValue: Getter<TValue | null>\n}\n\nexport type CoreCell<TData extends RowData, TValue> = {\n id: string\n getValue: CellContext<TData, TValue>['getValue']\n renderValue: CellContext<TData, TValue>['renderValue']\n row: Row<TData>\n column: Column<TData, TValue>\n getContext: () => CellContext<TData, TValue>\n}\n\nexport function createCell<TData extends RowData, TValue>(\n table: Table<TData>,\n row: Row<TData>,\n column: Column<TData, TValue>,\n columnId: string\n) {\n const getRenderValue = () =>\n cell.getValue() ?? table.options.renderFallbackValue\n\n const cell: CoreCell<TData, TValue> = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(\n () => [table, column, row, cell],\n (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell as Cell<TData, TValue>,\n getValue: cell.getValue,\n renderValue: cell.renderValue,\n }),\n {\n key: process.env.NODE_ENV === 'development' && 'cell.getContext',\n debug: () => table.options.debugAll,\n }\n ),\n }\n\n table._features.forEach(feature => {\n Object.assign(\n cell,\n feature.createCell?.(\n cell as Cell<TData, TValue>,\n column,\n row as Row<TData>,\n table\n )\n )\n }, {})\n\n return cell as Cell<TData, TValue>\n}\n","import { RowData, Cell, Row, Table } from '../types'\nimport { flattenBy, memo } from '../utils'\nimport { createCell } from './cell'\n\nexport type CoreRow<TData extends RowData> = {\n id: string\n index: number\n original: TData\n depth: number\n _valuesCache: Record<string, unknown>\n getValue: <TValue>(columnId: string) => TValue\n renderValue: <TValue>(columnId: string) => TValue\n subRows: Row<TData>[]\n getLeafRows: () => Row<TData>[]\n originalSubRows?: TData[]\n getAllCells: () => Cell<TData, unknown>[]\n _getAllCellsByColumnId: () => Record<string, Cell<TData, unknown>>\n}\n\nexport const createRow = <TData extends RowData>(\n table: Table<TData>,\n id: string,\n original: TData,\n rowIndex: number,\n depth: number,\n subRows?: Row<TData>[]\n): Row<TData> => {\n let row: CoreRow<TData> = {\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 = table.getColumn(columnId)\n\n if (!column.accessorFn) {\n return undefined\n }\n\n row._valuesCache[columnId] = column.accessorFn(\n row.original as TData,\n rowIndex\n )\n\n return row._valuesCache[columnId] as any\n },\n renderValue: columnId =>\n row.getValue(columnId) ?? table.options.renderFallbackValue,\n subRows: subRows ?? [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getAllCells: memo(\n () => [table.getAllLeafColumns()],\n leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row as Row<TData>, column, column.id)\n })\n },\n {\n key: process.env.NODE_ENV === 'development' && 'row.getAllCells',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n\n _getAllCellsByColumnId: memo(\n () => [row.getAllCells()],\n allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell\n return acc\n }, {} as Record<string, Cell<TData, unknown>>)\n },\n {\n key:\n process.env.NODE_ENV === 'production' && 'row.getAllCellsByColumnId',\n debug: () => table.options.debugAll ?? table.options.debugRows,\n }\n ),\n }\n\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i]\n Object.assign(row, feature?.createRow?.(row, table))\n }\n\n return row as Row<TData>\n}\n","import { createRow } from '../core/row'\nimport { Row, RowModel, Table, RowData } from '../types'\n\nexport function filterRows<TData extends RowData>(\n rows: Row<TData>[],\n filterRowImpl: (row: Row<TData>) => any,\n table: Table<TData>\n) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table)\n }\n\n return filterRowModelFromRoot(rows, filterRowImpl, table)\n}\n\nexport function filterRowModelFromLeafs<TData extends RowData>(\n rowsToFilter: Row<TData>[],\n filterRow: (row: Row<TData>) => Row<TData>[],\n table: Table<TData>\n): RowModel<TData> {\n const newFilteredFlatRows: Row<TData>[] = []\n const newFilteredRowsById: Record<string, Row<TData>> = {}\n\n const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n const rows: Row<TData>[] = []\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n if (row.subRows?.length) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth\n )\n newRow.columnFilters = row.columnFilters\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n if (!newRow.subRows.length) {\n continue\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}\n\nexport function filterRowModelFromRoot<TData extends RowData>(\n rowsToFilter: Row<TData>[],\n filterRow: (row: Row<TData>) => any,\n table: Table<TData>\n): RowModel<TData> {\n const newFilteredFlatRows: Row<TData>[] = []\n const newFilteredRowsById: Record<string, Row<TData>> = {}\n\n // Filters top level and nested rows\n const recurseFilterRows = (rowsToFilter: Row<TData>[], depth = 0) => {\n // Filter from parents downward first\n\n const rows = []\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i]!\n\n const pass = filterRow(row)\n\n if (pass) {\n if (row.subRows?.length) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth\n )\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","import { Table, Row, RowModel, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getExpandedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getState().expanded,\n table.getPreExpandedRowModel(),\n table.options.paginateExpandedRows,\n ],\n (expanded, rowModel, paginateExpandedRows) => {\n if (\n !rowModel.rows.length ||\n (expanded !== true && !Object.keys(expanded ?? {}).length)\n ) {\n return rowModel\n }\n\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel\n }\n\n return expandRows(rowModel)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getExpandedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n )\n}\n\nexport function expandRows<TData extends RowData>(rowModel: RowModel<TData>) {\n const expandedRows: Row<TData>[] = []\n\n const handleRow = (row: Row<TData>) => {\n expandedRows.push(row)\n\n if (row.subRows?.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow)\n }\n }\n\n rowModel.rows.forEach(handleRow)\n\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById,\n }\n}\n","import {\n AccessorFn,\n ColumnDef,\n DisplayColumnDef,\n GroupColumnDef,\n IdentifiedColumnDef,\n RowData,\n} from './types'\nimport { DeepKeys, DeepValue, RequiredKeys } from './utils'\n\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nexport type ColumnHelper<TData extends RowData> = {\n accessor: <\n TAccessor extends AccessorFn<TData> | DeepKeys<TData>,\n TValue extends TAccessor extends AccessorFn<TData, infer TReturn>\n ? TReturn\n : TAccessor extends DeepKeys<TData>\n ? DeepValue<TData, TAccessor>\n : never\n >(\n accessor: TAccessor,\n column: TAccessor extends AccessorFn<TData>\n ? DisplayColumnDef<TData, TValue>\n : IdentifiedColumnDef<TData, TValue>\n ) => ColumnDef<TData, TValue>\n display: (column: DisplayColumnDef<TData>) => ColumnDef<TData, unknown>\n group: (column: GroupColumnDef<TData>) => ColumnDef<TData, unknown>\n}\n\nexport function createColumnHelper<\n TData extends RowData\n>(): ColumnHelper<TData> {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function'\n ? ({\n ...column,\n accessorFn: accessor,\n } as any)\n : {\n ...column,\n accessorKey: accessor,\n }\n },\n display: column => column as ColumnDef<TData, unknown>,\n group: column => column as ColumnDef<TData, unknown>,\n }\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getCoreRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.options.data],\n (\n data\n ): {\n rows: Row<TData>[]\n flatRows: Row<TData>[]\n rowsById: Record<string, Row<TData>>\n } => {\n const rowModel: RowModel<TData> = {\n rows: [],\n flatRows: [],\n rowsById: {},\n }\n\n const accessRows = (\n originalRows: TData[],\n depth = 0,\n parent?: Row<TData>\n ): Row<TData>[] => {\n const rows = [] as Row<TData>[]\n\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\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 // Make the row\n const row = createRow(\n table,\n table._getRowId(originalRows[i]!, i, parent),\n originalRows[i]!,\n i,\n depth\n )\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row)\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row\n // Push table row into parent\n rows.push(row)\n\n // Get the original subrows\n if (table.options.getSubRows) {\n row.originalSubRows = table.options.getSubRows(\n originalRows[i]!,\n i\n )\n\n // Then recursively access them\n if (row.originalSubRows?.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row)\n }\n }\n }\n\n return rows\n }\n\n rowModel.rows = accessRows(data)\n\n return rowModel\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { Table, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getFacetedMinMaxValues<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => undefined | [number, number] {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId).getFacetedRowModel()],\n facetedRowModel => {\n const firstValue = facetedRowModel.flatRows[0]?.getValue(columnId)\n\n if (typeof firstValue === 'undefined') {\n return undefined\n }\n\n let facetedMinMaxValues: [any, any] = [firstValue, firstValue]\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const value = facetedRowModel.flatRows[i]!.getValue<number>(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 {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedMinMaxValues_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFacetedRowModel<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => RowModel<TData> {\n return (table, columnId) =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n table.getFilteredRowModel(),\n ],\n (preRowModel, columnFilters, globalFilter) => {\n if (\n !preRowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n return preRowModel\n }\n\n const filterableIds = [\n ...columnFilters.map(d => d.id).filter(d => d !== columnId),\n globalFilter ? '__global__' : undefined,\n ].filter(Boolean) as string[]\n\n const filterRowsImpl = (row: Row<TData>) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n return filterRows(preRowModel.rows, filterRowsImpl, table)\n },\n {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedRowModel_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { Table, RowData } from '../types'\nimport { memo } from '../utils'\n\nexport function getFacetedUniqueValues<TData extends RowData>(): (\n table: Table<TData>,\n columnId: string\n) => () => Map<any, number> {\n return (table, columnId) =>\n memo(\n () => [table.getColumn(columnId).getFacetedRowModel()],\n facetedRowModel => {\n let facetedUniqueValues = new Map<any, number>()\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const value = facetedRowModel.flatRows[i]?.getValue(columnId)\n\n if (facetedUniqueValues.has(value)) {\n facetedUniqueValues.set(\n value,\n (facetedUniqueValues.get(value) ?? 0) + 1\n )\n } else {\n facetedUniqueValues.set(value, 1)\n }\n }\n\n return facetedUniqueValues\n },\n {\n key:\n process.env.NODE_ENV === 'development' &&\n 'getFacetedUniqueValues_' + columnId,\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {},\n }\n )\n}\n","import { ResolvedColumnFilter } from '../features/Filters'\nimport { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { filterRows } from './filterRowsUtils'\n\nexport function getFilteredRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getPreFilteredRowModel(),\n table.getState().columnFilters,\n table.getState().globalFilter,\n ],\n (rowModel, columnFilters, globalFilter) => {\n if (\n !rowModel.rows.length ||\n (!columnFilters?.length && !globalFilter)\n ) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i]!.columnFilters = {}\n rowModel.flatRows[i]!.columnFiltersMeta = {}\n }\n return rowModel\n }\n\n const resolvedColumnFilters: ResolvedColumnFilter<TData>[] = []\n const resolvedGlobalFilters: ResolvedColumnFilter<TData>[] = []\n\n ;(columnFilters ?? []).forEach(d => {\n const column = table.getColumn(d.id)\n\n if (!column) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `Table: Could not find a column to filter with columnId: ${d.id}`\n )\n }\n }\n\n const filterFn = column.getFilterFn()\n\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `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.resolveFilterValue?.(d.value) ?? d.value,\n })\n })\n\n const filterableIds = columnFilters.map(d => d.id)\n\n const globalFilterFn = table.getGlobalFilterFn()\n\n const globallyFilterableColumns = table\n .getAllLeafColumns()\n .filter(column => column.getCanGlobalFilter())\n\n if (\n globalFilter &&\n globalFilterFn &&\n globallyFilterableColumns.length\n ) {\n filterableIds.push('__global__')\n\n globallyFilterableColumns.forEach(column => {\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue:\n globalFilterFn.resolveFilterValue?.(globalFilter) ??\n globalFilter,\n })\n })\n }\n\n let currentColumnFilter\n let currentGlobalFilter\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j]!\n\n row.columnFilters = {}\n\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i]!\n const id = currentColumnFilter.id\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(\n row,\n id,\n currentColumnFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n }\n }\n\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i]!\n const id = currentGlobalFilter.id\n // Tag the row with the first truthy global filter state\n if (\n currentGlobalFilter.filterFn(\n row,\n id,\n currentGlobalFilter.resolvedValue,\n filterMeta => {\n row.columnFiltersMeta[id] = filterMeta\n }\n )\n ) {\n row.columnFilters.__global__ = true\n break\n }\n }\n\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false\n }\n }\n }\n\n const filterRowsImpl = (row: Row<TData>) => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]!] === false) {\n return false\n }\n }\n return true\n }\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table)\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getFilteredRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\n )\n}\n","import { createRow } from '../core/row'\nimport { Table, Row, RowModel, RowData } from '../types'\nimport { flattenBy, memo } from '../utils'\n\nexport function getGroupedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.getState().grouping, table.getPreGroupedRowModel()],\n (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n return rowModel\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId =>\n table.getColumn(columnId)\n )\n\n const groupedFlatRows: Row<TData>[] = []\n const groupedRowsById: Record<string, Row<TData>> = {}\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>[],\n depth = 0,\n parentId?: string\n ) => {\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth\n\n groupedFlatRows.push(row)\n groupedRowsById[row.id] = row\n\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1)\n }\n\n return row\n })\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.subRows)\n : groupedRows\n\n const row = createRow(\n table,\n id,\n leafRows[0]!.original,\n index,\n depth\n )\n\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: (columnId: string) => {\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 row._valuesCache[columnId] =\n groupedRows[0].getValue(columnId) ?? undefined\n }\n\n return row._valuesCache[columnId]\n }\n\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId]\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId)\n const aggregateFn = column.getAggregationFn()\n\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(\n columnId,\n leafRows,\n groupedRows\n )\n\n return row._groupingValuesCache[columnId]\n }\n },\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(rowModel.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 {\n key: process.env.NODE_ENV === 'development' && 'getGroupedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._queue(() => {\n table._autoResetExpanded()\n table._autoResetPageIndex()\n })\n },\n }\n )\n}\n\nfunction groupBy<TData extends RowData>(rows: Row<TData>[], columnId: string) {\n const groupMap = new Map<any, Row<TData>[]>()\n\n return rows.reduce((map, row) => {\n const resKey = `${row.getValue(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 { Table, RowModel, Row, RowData } from '../types'\nimport { memo } from '../utils'\nimport { expandRows } from './getExpandedRowModel'\n\nexport function getPaginationRowModel<TData extends RowData>(opts?: {\n initialSync: boolean\n}): (table: Table<TData>) => () => RowModel<TData> {\n return table =>\n memo(\n () => [\n table.getState().pagination,\n table.getPrePaginationRowModel(),\n table.options.paginateExpandedRows\n ? undefined\n : table.getState().expanded,\n ],\n (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel\n }\n\n const { pageSize, pageIndex } = 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 let paginatedRowModel: RowModel<TData>\n\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById,\n })\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById,\n }\n }\n\n paginatedRowModel.flatRows = []\n\n const handleRow = (row: Row<TData>) => {\n paginatedRowModel.flatRows.push(row)\n if (row.subRows.length) {\n row.subRows.forEach(handleRow)\n }\n }\n\n paginatedRowModel.rows.forEach(handleRow)\n\n return paginatedRowModel\n },\n {\n key: process.env.NODE_ENV === 'development' && 'getPaginationRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n }\n )\n}\n","import { Table, Row, RowModel, RowData } from '../types'\nimport { SortingFn } from '../features/Sorting'\nimport { memo } from '../utils'\n\nexport function getSortedRowModel<TData extends RowData>(): (\n table: Table<TData>\n) => () => RowModel<TData> {\n return table =>\n memo(\n () => [table.getState().sorting, table.getPreSortedRowModel()],\n (sorting, rowModel) => {\n if (!rowModel.rows.length || !sorting?.length) {\n return rowModel\n }\n\n const sortingState = table.getState().sorting\n\n const sortedFlatRows: Row<TData>[] = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort =>\n table.getColumn(sort.id).getCanSort()\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1\n invertSorting?: boolean\n sortingFn: SortingFn<TData>\n }\n > = {}\n\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id)\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn(),\n }\n })\n\n const sortData = (rows: Row<TData>[]) => {\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.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = typeof aValue === 'undefined'\n const bUndefined = typeof bValue === 'undefined'\n\n if (aUndefined || bUndefined) {\n return aUndefined && bUndefined\n ? 0\n : aUndefined\n ? columnInfo.sortUndefined\n : -columnInfo.sortUndefined\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 {\n key: process.env.NODE_ENV === 'development' && 'getSortedRowModel',\n debug: () => table.options.debugAll ?? table.options.debugTable,\n onChange: () => {\n table._autoResetPageIndex()\n },\n }\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","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","createColumn","table","columnDef","depth","parent","_ref","_resolvedColumnDef$id","resolvedColumnDef","_getDefaultColumnDef","accessorKey","accessorFn","id","replace","undefined","header","includes","originalRow","split","Error","column","columns","getFlatColumns","_column$columns","flatMap","_table$options$debugA","options","debugAll","debugColumns","getLeafColumns","_getOrderColumnsFn","orderColumns","_column$columns2","leafColumns","_table$options$debugA2","_features","reduce","obj","feature","Object","assign","createHeader","_options$id","isPlaceholder","placeholderId","subHeaders","colSpan","rowSpan","headerGroup","getLeafHeaders","leafHeaders","recurseHeader","h","map","getContext","Headers","createTable","getHeaderGroups","getAllColumns","getVisibleLeafColumns","getState","columnPinning","left","right","allColumns","_left$map$filter","_right$map$filter","leftColumns","columnId","find","filter","Boolean","rightColumns","buildHeaderGroups","process","debugHeaders","getCenterHeaderGroups","getLeftHeaderGroups","_left$map$filter2","_table$options$debugA3","getRightHeaderGroups","_right$map$filter2","_table$options$debugA4","getFooterGroups","headerGroups","reverse","_table$options$debugA5","getLeftFooterGroups","_table$options$debugA6","getCenterFooterGroups","_table$options$debugA7","getRightFooterGroups","_table$options$debugA8","getFlatHeaders","headers","_table$options$debugA9","getLeftFlatHeaders","_table$options$debugA10","getCenterFlatHeaders","_table$options$debugA11","getRightFlatHeaders","_table$options$debugA12","getCenterLeafHeaders","flatHeaders","_header$subHeaders","_table$options$debugA13","getLeftLeafHeaders","_header$subHeaders2","_table$options$debugA14","getRightLeafHeaders","_header$subHeaders3","_table$options$debugA15","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","_table$options$debugA16","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","getIsVisible","createHeaderGroup","headersToGroup","join","pendingParentHeaders","headerToGroup","latestPendingParentHeader","bottomHeaders","recurseHeadersForSpans","childRowSpans","childColSpan","childRowSpan","defaultColumnSizing","size","minSize","maxSize","Number","MAX_SAFE_INTEGER","ColumnSizing","getDefaultColumnDef","getInitialState","state","columnSizing","columnSizingInfo","startOffset","startSize","deltaOffset","deltaPercentage","isResizingColumn","columnSizingStart","getDefaultOptions","columnResizeMode","onColumnSizingChange","onColumnSizingInfoChange","getSize","_column$columnDef$min","_column$columnDef$max","columnSize","getStart","position","getLeftVisibleLeafColumns","getRightVisibleLeafColumns","findIndex","prevSiblingColumn","resetSize","setColumnSizing","_ref2","_","rest","getCanResize","_column$columnDef$ena","_table$options$enable","enableResizing","enableColumnResizing","getIsResizing","sum","_header$column$getSiz","prevSiblingHeader","getResizeHandler","getColumn","canResize","e","persist","isTouchStartEvent","touches","clientX","updateOffset","eventType","clientXPos","newColumnSizing","setColumnSizingInfo","_old$startOffset","_old$startSize","_ref3","headerSize","mouseEvents","moveHandler","onMove","upHandler","document","removeEventListener","passiveIfSupported","passiveEventSupported","passive","addEventListener","resetColumnSizing","defaultState","_table$initialState$c","initialState","resetHeaderSizeInfo","_table$initialState$c2","getTotalSize","_table$getHeaderGroup","_table$getHeaderGroup2","getLeftTotalSize","_table$getLeftHeaderG","_table$getLeftHeaderG2","getCenterTotalSize","_table$getCenterHeade","_table$getCenterHeade2","getRightTotalSize","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","window","err","type","Expanding","expanded","onExpandedChange","paginateExpandedRows","registered","queued","_autoResetExpanded","_table$options$autoRe","autoResetAll","autoResetExpanded","manualExpanding","_queue","resetExpanded","setExpanded","toggleAllRowsExpanded","getIsAllRowsExpanded","_table$initialState$e","_table$initialState","getCanSomeRowsExpand","getRowModel","flatRows","row","getCanExpand","getToggleAllRowsExpandedHandler","getIsSomeRowsExpanded","values","keys","getIsExpanded","getExpandedDepth","rowsById","splitId","getPreExpandedRowModel","getSortedRowModel","getExpandedRowModel","_getExpandedRowModel","createRow","toggleExpanded","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","getIsRowExpanded","_table$options$getRow","_row$subRows","getRowCanExpand","enableExpanding","subRows","getToggleExpandedHandler","canExpand","includesString","filterValue","_row$getValue","search","toLowerCase","getValue","autoRemove","val","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","rowValue","resolveFilterValue","unsafeMin","unsafeMax","parsedMin","parseFloat","parsedMax","isNaN","Infinity","temp","filterFns","Filters","filterFn","columnFilters","globalFilter","onColumnFiltersChange","onGlobalFilterChange","filterFromLeafRows","globalFilterFn","getColumnCanGlobalFilter","_table$getCoreRowMode","_table$getCoreRowMode2","value","getCoreRowModel","_getAllCellsByColumnId","getAutoFilterFn","firstRow","Array","isArray","getFilterFn","_table$options$filter","_table$options$filter2","getCanFilter","_table$options$enable2","enableColumnFilter","enableColumnFilters","enableFilters","getCanGlobalFilter","_column$columnDef$ena2","_table$options$enable3","_table$options$enable4","_table$options$getCol","enableGlobalFilter","getIsFiltered","getFilterIndex","getFilterValue","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","_table$getState$colum4","setFilterValue","setColumnFilters","previousfilter","newFilter","_old$filter","shouldAutoRemoveFilter","newFilterObj","_old$map","_getFacetedRowModel","getFacetedRowModel","getPreFilteredRowModel","_getFacetedUniqueValues","getFacetedUniqueValues","Map","_getFacetedMinMaxValues","getFacetedMinMaxValues","columnFiltersMeta","getGlobalAutoFilterFn","getGlobalFilterFn","_table$options$filter3","_table$options$filter4","getAllLeafColumns","_functionalUpdate","setGlobalFilter","resetGlobalFilter","resetColumnFilters","getFilteredRowModel","_getFilteredRowModel","manualFiltering","_getGlobalFacetedRowModel","getGlobalFacetedRowModel","_getGlobalFacetedUniqueValues","getGlobalFacetedUniqueValues","_getGlobalFacetedMinMaxValues","getGlobalFacetedMinMaxValues","aggregationFns","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","unique","from","Set","uniqueCount","_columnId","Grouping","aggregatedCell","props","_toString","_props$getValue","toString","aggregationFn","grouping","onGroupingChange","groupedColumnMode","toggleGrouping","setGrouping","getCanGroup","enableGrouping","getIsGrouped","_table$getState$group","getGroupedIndex","_table$getState$group2","indexOf","getToggleGroupingHandler","canGroup","getAutoAggregationFn","prototype","call","getAggregationFn","_table$options$aggreg","_table$options$aggreg2","resetGrouping","_table$initialState$g","getPreGroupedRowModel","getGroupedRowModel","_getGroupedRowModel","manualGrouping","groupingColumnId","_groupingValuesCache","createCell","cell","getIsPlaceholder","getIsAggregated","nonGroupingColumns","col","g","Ordering","columnOrder","onColumnOrderChange","setColumnOrder","resetColumnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","shift","foundIndex","splice","Pagination","pagination","pageIndex","pageSize","onPaginationChange","_autoResetPageIndex","autoResetPageIndex","manualPagination","resetPageIndex","setPagination","resetPagination","_table$initialState$p","setPageIndex","maxPageIndex","pageCount","_table$initialState$p2","_table$initialState$p3","resetPageSize","_table$initialState$p4","_table$initialState2","_table$initialState2$","setPageSize","topRowIndex","floor","setPageCount","_table$options$pageCo","newPageCount","getPageOptions","getPageCount","pageOptions","fill","i","debugTable","getCanPreviousPage","getCanNextPage","previousPage","nextPage","getPrePaginationRowModel","getPaginationRowModel","_getPaginationRowModel","_table$options$pageCo2","ceil","rows","Pinning","onColumnPinningChange","pin","columnIds","setColumnPinning","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","getCanPin","_d$columnDef$enablePi","enablePinning","getIsPinned","leafColumnIds","isLeft","isRight","getPinnedIndex","getCenterVisibleCells","_getAllVisibleCells","allCells","leftAndRight","debugRows","getLeftVisibleCells","getRightVisibleCells","resetColumnPinning","getDefaultPinningState","getIsSomeColumnsPinned","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","getLeftLeafColumns","getRightLeafColumns","getCenterLeafColumns","RowSelection","rowSelection","onRowSelectionChange","enableRowSelection","enableMultiRowSelection","enableSubRowSelection","setRowSelection","resetRowSelection","_table$initialState$r","toggleAllRowsSelected","getIsAllRowsSelected","preGroupedFlatRows","getCanSelect","toggleAllPageRowsSelected","resolvedValue","getIsAllPageRowsSelected","mutateRowIsSelected","getPreSelectedRowModel","getSelectedRowModel","rowModel","selectRowsFn","getFilteredSelectedRowModel","getGroupedSelectedRowModel","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","getIsSomeRowsSelected","_table$getState$rowSe","totalSelected","getIsSomePageRowsSelected","getIsSelected","getIsSomeSelected","getToggleAllRowsSelectedHandler","target","checked","getToggleAllPageRowsSelectedHandler","toggleSelected","isSelected","selectedRowIds","isRowSelected","isSubRowSelected","getIsAllSubRowsSelected","getCanSelectSubRows","getCanMultiSelect","getToggleSelectedHandler","canSelect","_target","getRow","newSelectedFlatRows","newSelectedRowsById","recurseRows","_row$subRows2","selection","_selection$row$id","allChildrenSelected","someSelected","subRow","reSplitAlphaNumeric","compareBasic","a","b","compareAlphanumeric","aStr","bStr","aa","bb","an","parseInt","bn","combo","sort","sortingFns","alphanumeric","rowA","rowB","alphanumericCaseSensitive","text","textCaseSensitive","datetime","basic","Sorting","sorting","sortingFn","onSortingChange","isMultiSortEvent","shiftKey","getAutoSortingFn","firstRows","slice","isString","getAutoSortDir","getSortingFn","_table$options$sortin","_table$options$sortin2","toggleSorting","desc","multi","nextSortingOrder","getNextSortingOrder","hasManualValue","setSorting","existingSorting","existingIndex","sortAction","newSorting","nextDesc","_table$options$maxMul","getCanMultiSort","maxMultiSortColCount","getFirstSortDir","_column$columnDef$sor","sortDescFirst","firstSortDirection","isSorted","getIsSorted","enableSortingRemoval","enableMultiRemove","getCanSort","enableSorting","enableMultiSort","_table$getState$sorti","columnSort","getSortIndex","_table$getState$sorti2","_table$getState$sorti3","clearSorting","getToggleSortingHandler","canSort","resetSorting","_table$initialState$s","getPreSortedRowModel","_getSortedRowModel","manualSorting","Visibility","columnVisibility","onColumnVisibilityChange","toggleVisibility","getCanHide","setColumnVisibility","enableHiding","getToggleVisibilityHandler","getAllCells","cells","getVisibleCells","makeVisibleColumnsMethod","getColumns","getVisibleFlatColumns","getAllFlatColumns","getCenterVisibleLeafColumns","resetColumnVisibility","toggleAllColumnsVisible","_value","getIsAllColumnsVisible","getIsSomeColumnsVisible","getToggleAllColumnsVisibilityHandler","features","renderValue","_cell$getValue","renderFallbackValue","original","rowIndex","_valuesCache","hasOwnProperty","getLeafRows","acc","filterRows","filterRowImpl","rowsToFilter","filterRow","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","filterRowModelFromLeafs","filterRowModelFromRoot","expandRows","expandedRows","handleRow","accessor","display","group","_options$initialState","defaultOptions","_feature$getInitialSt","queuedTimeout","coreInstance","cb","Promise","resolve","then","catch","error","setTimeout","reset","setOptions","newOptions","mergeOptions","onStateChange","_getRowId","getRowId","_getCoreRowModel","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","_getColumnDefs","columnDefs","recurseColumns","groupingColumnDef","_getAllFlatColumnsById","flatColumns","data","accessRows","originalRows","_row$originalSubRows","getSubRows","originalSubRows","facetedRowModel","_facetedRowModel$flat","firstValue","facetedMinMaxValues","preRowModel","filterableIds","facetedUniqueValues","_facetedUniqueValues$","has","set","get","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","globallyFilterableColumns","currentColumnFilter","currentGlobalFilter","_globalFilterFn$resol","j","filterMeta","__global__","existingGrouping","groupedFlatRows","groupedRowsById","groupUpRecursively","parentId","rowGroupsMap","groupMap","resKey","previous","groupBy","aggregatedGroupedRows","entries","groupingValue","groupedRows","_groupedRows$0$getVal","aggregateFn","pageStart","pageEnd","paginatedRowModel","sortingState","sortedFlatRows","availableSorting","columnInfoById","sortEntry","sortUndefined","invertSorting","sortData","sortedData","_sortEntry$desc","columnInfo","isDesc","aUndefined","bUndefined","sortInt"],"mappings":"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"}
|