@tanstack/table-core 8.8.0 → 8.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/core/row.d.ts +4 -2
- package/build/lib/core/row.js +14 -2
- package/build/lib/core/row.js.map +1 -1
- package/build/lib/features/RowSelection.js +3 -3
- package/build/lib/features/RowSelection.js.map +1 -1
- package/build/lib/index.esm.js +29 -17
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.mjs +29 -17
- package/build/lib/index.mjs.map +1 -1
- package/build/lib/utils/filterRowsUtils.js +6 -6
- package/build/lib/utils/filterRowsUtils.js.map +1 -1
- package/build/lib/utils/getCoreRowModel.js +1 -1
- package/build/lib/utils/getCoreRowModel.js.map +1 -1
- package/build/lib/utils/getGroupedRowModel.js +5 -5
- package/build/lib/utils/getGroupedRowModel.js.map +1 -1
- package/build/umd/index.development.js +29 -17
- 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/row.ts +17 -3
- package/src/features/RowSelection.ts +3 -3
- package/src/utils/filterRowsUtils.ts +6 -14
- package/src/utils/getCoreRowModel.ts +1 -1
- package/src/utils/getGroupedRowModel.ts +4 -10
|
@@ -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 {\n Column,\n Table,\n AccessorFn,\n ColumnDef,\n RowData,\n ColumnDefResolved,\n} from '../types'\nimport { memo } from '../utils'\n\nexport interface 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): Column<TData, TValue> {\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 if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(\n `\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`\n )\n }\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 interface CoreHeaderGroup<TData extends RowData> {\n id: string\n depth: number\n headers: Header<TData, unknown>[]\n}\n\nexport interface HeaderContext<TData, TValue> {\n table: Table<TData>\n header: Header<TData, TValue>\n column: Column<TData, TValue>\n}\n\nexport interface 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 interface 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): Header<TData, TValue> {\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 interface ColumnSizingTableState {\n columnSizing: ColumnSizingState\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = Record<string, number>\n\nexport interface 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 interface ColumnSizingOptions {\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport interface ColumnSizingDefaultOptions {\n columnResizeMode: ColumnResizeMode\n onColumnSizingChange: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport interface 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 interface ColumnSizingColumnDef {\n enableResizing?: boolean\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nexport interface ColumnSizingColumn {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getCanResize: () => boolean\n getIsResizing: () => boolean\n resetSize: () => void\n}\n\nexport interface 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 (!column || !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 newColumnSizing: ColumnSizingState = {}\n\n const updateOffset = (\n eventType: 'move' | 'end',\n clientXPos?: number\n ) => {\n if (typeof clientXPos !== 'number') {\n return\n }\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 document.addEventListener(\n 'touchmove',\n touchEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'touchend',\n touchEvents.upHandler,\n passiveIfSupported\n )\n } else {\n document.addEventListener(\n 'mousemove',\n mouseEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'mouseup',\n mouseEvents.upHandler,\n passiveIfSupported\n )\n }\n\n 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 interface ExpandedTableState {\n expanded: ExpandedState\n}\n\nexport interface ExpandedRow {\n toggleExpanded: (expanded?: boolean) => void\n getIsExpanded: () => boolean\n getCanExpand: () => boolean\n getToggleExpandedHandler: () => () => void\n}\n\nexport interface 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 interface 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 Boolean(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 Boolean(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 interface FiltersTableState {\n columnFilters: ColumnFiltersState\n globalFilter: any\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport interface ColumnFilter {\n id: string\n value: unknown\n}\n\nexport interface ResolvedColumnFilter<TData extends RowData> {\n id: string\n resolvedValue: unknown\n filterFn: FilterFn<TData>\n}\n\nexport interface 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 interface FiltersColumnDef<TData extends RowData> {\n filterFn?: FilterFnOption<TData>\n enableColumnFilter?: boolean\n enableGlobalFilter?: boolean\n}\n\nexport interface 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 interface FiltersRow<TData extends RowData> {\n columnFilters: Record<string, boolean>\n columnFiltersMeta: Record<string, FilterMeta>\n}\n\ninterface FiltersOptionsBase<TData extends RowData> {\n enableFilters?: boolean\n manualFiltering?: boolean\n filterFromLeafRows?: boolean\n maxLeafRowFilterDepth?: number\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}\n\ntype ResolvedFilterFns = keyof FilterFns extends never\n ? {\n filterFns?: Record<string, FilterFn<any>>\n }\n : {\n filterFns: Record<keyof FilterFns, FilterFn<any>>\n }\n\nexport interface FiltersOptions<TData extends RowData>\n extends FiltersOptionsBase<TData>,\n ResolvedFilterFns {}\n\nexport interface 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 maxLeafRowFilterDepth: 100,\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 } as FiltersOptions<TData>\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 // @ts-ignore \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 // @ts-ignore\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 interface 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 interface 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 interface 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 interface GroupingRow {\n groupingColumnId?: string\n groupingValue?: unknown\n getIsGrouped: () => boolean\n _groupingValuesCache: Record<string, any>\n}\n\nexport interface GroupingCell {\n getIsGrouped: () => boolean\n getIsPlaceholder: () => boolean\n getIsAggregated: () => boolean\n}\n\nexport interface ColumnDefaultOptions {\n // Column\n onGroupingChange: OnChangeFn<GroupingState>\n enableGrouping: boolean\n}\n\ninterface GroupingOptionsBase {\n manualGrouping?: boolean\n onGroupingChange?: OnChangeFn<GroupingState>\n enableGrouping?: boolean\n getGroupedRowModel?: (table: Table<any>) => () => RowModel<any>\n groupedColumnMode?: false | 'reorder' | 'remove'\n}\n\ntype ResolvedAggregationFns = keyof AggregationFns extends never\n ? {\n aggregationFns?: Record<string, AggregationFn<any>>\n }\n : {\n aggregationFns: Record<keyof AggregationFns, AggregationFn<any>>\n }\n\nexport interface GroupingOptions\n extends GroupingOptionsBase,\n ResolvedAggregationFns {}\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport interface 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 { orderColumns } from './Grouping'\nimport { TableFeature } from '../core/table'\n\nexport interface ColumnOrderTableState {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport interface ColumnOrderOptions {\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport interface ColumnOrderDefaultOptions {\n onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport interface 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 interface PaginationState {\n pageIndex: number\n pageSize: number\n}\n\nexport interface PaginationTableState {\n pagination: PaginationState\n}\n\nexport interface PaginationInitialTableState {\n pagination?: Partial<PaginationState>\n}\n\nexport interface PaginationOptions {\n pageCount?: number\n manualPagination?: boolean\n onPaginationChange?: OnChangeFn<PaginationState>\n autoResetPageIndex?: boolean\n getPaginationRowModel?: (table: Table<any>) => () => RowModel<any>\n}\n\nexport interface PaginationDefaultOptions {\n onPaginationChange: OnChangeFn<PaginationState>\n}\n\nexport interface 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.max(0, Math.min(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 interface ColumnPinningState {\n left?: string[]\n right?: string[]\n}\n\nexport interface ColumnPinningTableState {\n columnPinning: ColumnPinningState\n}\n\nexport interface ColumnPinningOptions {\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningDefaultOptions {\n onColumnPinningChange: OnChangeFn<ColumnPinningState>\n}\n\nexport interface ColumnPinningColumnDef {\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningColumn {\n getCanPin: () => boolean\n getPinnedIndex: () => number\n getIsPinned: () => ColumnPinningPosition\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport interface ColumnPinningRow<TData extends RowData> {\n getLeftVisibleCells: () => Cell<TData, unknown>[]\n getCenterVisibleCells: () => Cell<TData, unknown>[]\n getRightVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface 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: 'right' } 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 interface RowSelectionTableState {\n rowSelection: RowSelectionState\n}\n\nexport interface 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 interface 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 interface 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(\n row => row.getCanSelect() && !rowSelection[row.id]\n )\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 interface ColumnSort {\n id: string\n desc: boolean\n}\n\nexport type SortingState = ColumnSort[]\n\nexport interface SortingTableState {\n sorting: SortingState\n}\n\nexport interface 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 interface 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 interface 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\ninterface SortingOptionsBase {\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}\n\ntype ResolvedSortingFns = keyof SortingFns extends never\n ? {\n sortingFns?: Record<string, SortingFn<any>>\n }\n : {\n sortingFns: Record<keyof SortingFns, SortingFn<any>>\n }\n\nexport interface SortingOptions<TData extends RowData>\n extends SortingOptionsBase,\n ResolvedSortingFns {}\n\nexport interface 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 interface VisibilityTableState {\n columnVisibility: VisibilityState\n}\n\nexport interface VisibilityOptions {\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n enableHiding?: boolean\n}\n\nexport interface VisibilityDefaultOptions {\n onColumnVisibilityChange: OnChangeFn<VisibilityState>\n}\n\nexport interface 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 interface VisibilityColumnDef {\n enableHiding?: boolean\n}\n\nexport interface VisibilityRow<TData extends RowData> {\n _getAllVisibleCells: () => Cell<TData, unknown>[]\n getVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface 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 { functionalUpdate, memo, RequiredKeys } from '../utils'\n\nimport {\n Updater,\n TableOptionsResolved,\n TableState,\n Table,\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 } 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 interface 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 interface CoreTableState {}\n\nexport interface 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 interface 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> | undefined\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 (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`)\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 interface 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 interface 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): Cell<TData, TValue> {\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 interface CoreRow<TData extends RowData> {\n id: string\n index: number\n original: TData\n depth: number\n _valuesCache: Record<string, unknown>\n _uniqueValuesCache: Record<string, unknown>\n getValue: <TValue>(columnId: string) => TValue\n getUniqueValues: <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 parentRow?: Row<TData>\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 parentRow?: Row<TData>\n): Row<TData> => {\n let row: CoreRow<TData> = {\n id,\n index: rowIndex,\n original,\n depth,\n parentRow,\n _valuesCache: {},\n _uniqueValuesCache: {},\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 getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column?.accessorFn) {\n return undefined\n }\n\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)]\n return row._uniqueValuesCache[columnId]\n }\n\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(\n row.original as TData,\n rowIndex\n )\n\n return row._uniqueValuesCache[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 const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n const recurseFilterRows = (\n rowsToFilter: Row<TData>[],\n depth = 0,\n parentRow?: Row<TData>\n ) => {\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 const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth,\n undefined,\n parentRow\n )\n newRow.columnFilters = row.columnFilters\n\n if (row.subRows?.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1, newRow)\n row = newRow\n\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n continue\n }\n\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n continue\n }\n } else {\n row = newRow\n if (filterRow(row)) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n }\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 const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\n\n // Filters top level and nested rows\n const recurseFilterRows = (\n rowsToFilter: Row<TData>[],\n depth = 0,\n parentRow?: Row<TData>\n ) => {\n // Filter from parents downward first\n\n const rows: Row<TData>[] = []\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 && depth < maxDepth) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth,\n undefined,\n parentRow\n )\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1, newRow)\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 parentRow?: 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, parentRow),\n originalRows[i]!,\n i,\n depth,\n undefined,\n parentRow\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 if (!facetedRowModel) return undefined\n \n const firstValue =\n facetedRowModel.flatRows[0]?.getUniqueValues(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 values =\n facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)\n\n for (let j = 0; j < values.length; j++) {\n const value = values[j]!\n\n if (value < facetedMinMaxValues[0]) {\n facetedMinMaxValues[0] = value\n } else if (value > facetedMinMaxValues[1]) {\n facetedMinMaxValues[1] = value\n }\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 if (!facetedRowModel) return new Map()\n\n let facetedUniqueValues = new Map<any, number>()\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values =\n facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)\n\n for (let j = 0; j < values.length; j++) {\n const value = values[j]!\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\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 return\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 parentRow?: Row<TData>,\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, row)\n }\n\n return row\n })\n }\n\n const columnId: string = 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(\n groupedRows,\n depth + 1,\n parentRow,\n id\n )\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 undefined,\n parentRow\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, undefined, '')\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 previous.push(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 if(!column) return\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]\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?.length) {\n row.subRows = sortData(row.subRows)\n }\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","_result","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","newColumnSizing","updateOffset","eventType","clientXPos","setColumnSizingInfo","_old$startOffset","_old$startSize","_ref3","headerSize","onMove","onEnd","mouseEvents","moveHandler","upHandler","document","removeEventListener","touchEvents","cancelable","preventDefault","stopPropagation","_e$touches$","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","maxLeafRowFilterDepth","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","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","getRenderValue","_cell$getValue","renderFallbackValue","original","rowIndex","parentRow","_valuesCache","_uniqueValuesCache","hasOwnProperty","getUniqueValues","getLeafRows","acc","filterRows","filterRowImpl","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","filterRowModelFromLeafs","_table$options$maxLea2","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","_table$getColumn","facetedRowModel","_facetedRowModel$flat","firstValue","facetedMinMaxValues","j","preRowModel","filterableIds","facetedUniqueValues","_facetedUniqueValues$","has","set","get","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","globallyFilterableColumns","currentColumnFilter","currentGlobalFilter","_globalFilterFn$resol","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 {\n Column,\n Table,\n AccessorFn,\n ColumnDef,\n RowData,\n ColumnDefResolved,\n} from '../types'\nimport { memo } from '../utils'\n\nexport interface 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): Column<TData, TValue> {\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 if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(\n `\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`\n )\n }\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 interface CoreHeaderGroup<TData extends RowData> {\n id: string\n depth: number\n headers: Header<TData, unknown>[]\n}\n\nexport interface HeaderContext<TData, TValue> {\n table: Table<TData>\n header: Header<TData, TValue>\n column: Column<TData, TValue>\n}\n\nexport interface 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 interface 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): Header<TData, TValue> {\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 interface ColumnSizingTableState {\n columnSizing: ColumnSizingState\n columnSizingInfo: ColumnSizingInfoState\n}\n\nexport type ColumnSizingState = Record<string, number>\n\nexport interface 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 interface ColumnSizingOptions {\n enableColumnResizing?: boolean\n columnResizeMode?: ColumnResizeMode\n onColumnSizingChange?: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange?: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport interface ColumnSizingDefaultOptions {\n columnResizeMode: ColumnResizeMode\n onColumnSizingChange: OnChangeFn<ColumnSizingState>\n onColumnSizingInfoChange: OnChangeFn<ColumnSizingInfoState>\n}\n\nexport interface 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 interface ColumnSizingColumnDef {\n enableResizing?: boolean\n size?: number\n minSize?: number\n maxSize?: number\n}\n\nexport interface ColumnSizingColumn {\n getSize: () => number\n getStart: (position?: ColumnPinningPosition) => number\n getCanResize: () => boolean\n getIsResizing: () => boolean\n resetSize: () => void\n}\n\nexport interface 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 (!column || !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 newColumnSizing: ColumnSizingState = {}\n\n const updateOffset = (\n eventType: 'move' | 'end',\n clientXPos?: number\n ) => {\n if (typeof clientXPos !== 'number') {\n return\n }\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 document.addEventListener(\n 'touchmove',\n touchEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'touchend',\n touchEvents.upHandler,\n passiveIfSupported\n )\n } else {\n document.addEventListener(\n 'mousemove',\n mouseEvents.moveHandler,\n passiveIfSupported\n )\n document.addEventListener(\n 'mouseup',\n mouseEvents.upHandler,\n passiveIfSupported\n )\n }\n\n 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 interface ExpandedTableState {\n expanded: ExpandedState\n}\n\nexport interface ExpandedRow {\n toggleExpanded: (expanded?: boolean) => void\n getIsExpanded: () => boolean\n getCanExpand: () => boolean\n getToggleExpandedHandler: () => () => void\n}\n\nexport interface 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 interface 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 Boolean(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 Boolean(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 interface FiltersTableState {\n columnFilters: ColumnFiltersState\n globalFilter: any\n}\n\nexport type ColumnFiltersState = ColumnFilter[]\n\nexport interface ColumnFilter {\n id: string\n value: unknown\n}\n\nexport interface ResolvedColumnFilter<TData extends RowData> {\n id: string\n resolvedValue: unknown\n filterFn: FilterFn<TData>\n}\n\nexport interface 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 interface FiltersColumnDef<TData extends RowData> {\n filterFn?: FilterFnOption<TData>\n enableColumnFilter?: boolean\n enableGlobalFilter?: boolean\n}\n\nexport interface 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 interface FiltersRow<TData extends RowData> {\n columnFilters: Record<string, boolean>\n columnFiltersMeta: Record<string, FilterMeta>\n}\n\ninterface FiltersOptionsBase<TData extends RowData> {\n enableFilters?: boolean\n manualFiltering?: boolean\n filterFromLeafRows?: boolean\n maxLeafRowFilterDepth?: number\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}\n\ntype ResolvedFilterFns = keyof FilterFns extends never\n ? {\n filterFns?: Record<string, FilterFn<any>>\n }\n : {\n filterFns: Record<keyof FilterFns, FilterFn<any>>\n }\n\nexport interface FiltersOptions<TData extends RowData>\n extends FiltersOptionsBase<TData>,\n ResolvedFilterFns {}\n\nexport interface 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 maxLeafRowFilterDepth: 100,\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 } as FiltersOptions<TData>\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 // @ts-ignore \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 // @ts-ignore\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 interface 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 interface 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 interface 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 interface GroupingRow {\n groupingColumnId?: string\n groupingValue?: unknown\n getIsGrouped: () => boolean\n _groupingValuesCache: Record<string, any>\n}\n\nexport interface GroupingCell {\n getIsGrouped: () => boolean\n getIsPlaceholder: () => boolean\n getIsAggregated: () => boolean\n}\n\nexport interface ColumnDefaultOptions {\n // Column\n onGroupingChange: OnChangeFn<GroupingState>\n enableGrouping: boolean\n}\n\ninterface GroupingOptionsBase {\n manualGrouping?: boolean\n onGroupingChange?: OnChangeFn<GroupingState>\n enableGrouping?: boolean\n getGroupedRowModel?: (table: Table<any>) => () => RowModel<any>\n groupedColumnMode?: false | 'reorder' | 'remove'\n}\n\ntype ResolvedAggregationFns = keyof AggregationFns extends never\n ? {\n aggregationFns?: Record<string, AggregationFn<any>>\n }\n : {\n aggregationFns: Record<keyof AggregationFns, AggregationFn<any>>\n }\n\nexport interface GroupingOptions\n extends GroupingOptionsBase,\n ResolvedAggregationFns {}\n\nexport type GroupingColumnMode = false | 'reorder' | 'remove'\n\nexport interface 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 { orderColumns } from './Grouping'\nimport { TableFeature } from '../core/table'\n\nexport interface ColumnOrderTableState {\n columnOrder: ColumnOrderState\n}\n\nexport type ColumnOrderState = string[]\n\nexport interface ColumnOrderOptions {\n onColumnOrderChange?: OnChangeFn<ColumnOrderState>\n}\n\nexport interface ColumnOrderDefaultOptions {\n onColumnOrderChange: OnChangeFn<ColumnOrderState>\n}\n\nexport interface 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 interface PaginationState {\n pageIndex: number\n pageSize: number\n}\n\nexport interface PaginationTableState {\n pagination: PaginationState\n}\n\nexport interface PaginationInitialTableState {\n pagination?: Partial<PaginationState>\n}\n\nexport interface PaginationOptions {\n pageCount?: number\n manualPagination?: boolean\n onPaginationChange?: OnChangeFn<PaginationState>\n autoResetPageIndex?: boolean\n getPaginationRowModel?: (table: Table<any>) => () => RowModel<any>\n}\n\nexport interface PaginationDefaultOptions {\n onPaginationChange: OnChangeFn<PaginationState>\n}\n\nexport interface 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.max(0, Math.min(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 interface ColumnPinningState {\n left?: string[]\n right?: string[]\n}\n\nexport interface ColumnPinningTableState {\n columnPinning: ColumnPinningState\n}\n\nexport interface ColumnPinningOptions {\n onColumnPinningChange?: OnChangeFn<ColumnPinningState>\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningDefaultOptions {\n onColumnPinningChange: OnChangeFn<ColumnPinningState>\n}\n\nexport interface ColumnPinningColumnDef {\n enablePinning?: boolean\n}\n\nexport interface ColumnPinningColumn {\n getCanPin: () => boolean\n getPinnedIndex: () => number\n getIsPinned: () => ColumnPinningPosition\n pin: (position: ColumnPinningPosition) => void\n}\n\nexport interface ColumnPinningRow<TData extends RowData> {\n getLeftVisibleCells: () => Cell<TData, unknown>[]\n getCenterVisibleCells: () => Cell<TData, unknown>[]\n getRightVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface 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: 'right' } 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 interface RowSelectionTableState {\n rowSelection: RowSelectionState\n}\n\nexport interface 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 interface 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 interface 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.filter(row => row.getCanSelect())\n const { rowSelection } = table.getState()\n\n let isAllPageRowsSelected = !!paginationFlatRows.length\n\n if (\n isAllPageRowsSelected &&\n paginationFlatRows.some(\n row => !rowSelection[row.id]\n )\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.filter(row => row.getCanSelect()).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 interface ColumnSort {\n id: string\n desc: boolean\n}\n\nexport type SortingState = ColumnSort[]\n\nexport interface SortingTableState {\n sorting: SortingState\n}\n\nexport interface 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 interface 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 interface 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\ninterface SortingOptionsBase {\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}\n\ntype ResolvedSortingFns = keyof SortingFns extends never\n ? {\n sortingFns?: Record<string, SortingFn<any>>\n }\n : {\n sortingFns: Record<keyof SortingFns, SortingFn<any>>\n }\n\nexport interface SortingOptions<TData extends RowData>\n extends SortingOptionsBase,\n ResolvedSortingFns {}\n\nexport interface 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 interface VisibilityTableState {\n columnVisibility: VisibilityState\n}\n\nexport interface VisibilityOptions {\n onColumnVisibilityChange?: OnChangeFn<VisibilityState>\n enableHiding?: boolean\n}\n\nexport interface VisibilityDefaultOptions {\n onColumnVisibilityChange: OnChangeFn<VisibilityState>\n}\n\nexport interface 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 interface VisibilityColumnDef {\n enableHiding?: boolean\n}\n\nexport interface VisibilityRow<TData extends RowData> {\n _getAllVisibleCells: () => Cell<TData, unknown>[]\n getVisibleCells: () => Cell<TData, unknown>[]\n}\n\nexport interface 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 { functionalUpdate, memo, RequiredKeys } from '../utils'\n\nimport {\n Updater,\n TableOptionsResolved,\n TableState,\n Table,\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 } 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 interface 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 interface CoreTableState {}\n\nexport interface 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 interface 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> | undefined\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 (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`)\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 interface 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 interface 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): Cell<TData, TValue> {\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 interface CoreRow<TData extends RowData> {\n id: string\n index: number\n original: TData\n depth: number\n parentId?: string\n _valuesCache: Record<string, unknown>\n _uniqueValuesCache: Record<string, unknown>\n getValue: <TValue>(columnId: string) => TValue\n getUniqueValues: <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 getParentRow: () => Row<TData> | undefined\n getParentRows: () => Row<TData>[]\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 parentId?: string\n): Row<TData> => {\n let row: CoreRow<TData> = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\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 getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId]\n }\n\n const column = table.getColumn(columnId)\n\n if (!column?.accessorFn) {\n return undefined\n }\n\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)]\n return row._uniqueValuesCache[columnId]\n }\n\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(\n row.original as TData,\n rowIndex\n )\n\n return row._uniqueValuesCache[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 getParentRow: () => (row.parentId ? table.getRow(row.parentId) : undefined),\n getParentRows: () => {\n let parentRows: Row<TData>[] = []\n let currentRow = row\n while (true) {\n const parentRow = currentRow.getParentRow()\n if (!parentRow) break\n parentRows.push(parentRow)\n currentRow = parentRow\n }\n return parentRows.reverse()\n },\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 const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\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 const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth,\n undefined,\n row.parentId\n )\n newRow.columnFilters = row.columnFilters\n\n if (row.subRows?.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1)\n row = newRow\n\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n continue\n }\n\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n continue\n }\n } else {\n row = newRow\n if (filterRow(row)) {\n rows.push(row)\n newFilteredRowsById[row.id] = row\n newFilteredRowsById[i] = row\n }\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 const maxDepth = table.options.maxLeafRowFilterDepth ?? 100\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: Row<TData>[] = []\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 && depth < maxDepth) {\n const newRow = createRow(\n table,\n row.id,\n row.original,\n row.index,\n row.depth,\n undefined,\n row.parentId\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 parentRow?: 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, parentRow),\n originalRows[i]!,\n i,\n depth,\n undefined,\n parentRow?.id\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 if (!facetedRowModel) return undefined\n \n const firstValue =\n facetedRowModel.flatRows[0]?.getUniqueValues(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 values =\n facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)\n\n for (let j = 0; j < values.length; j++) {\n const value = values[j]!\n\n if (value < facetedMinMaxValues[0]) {\n facetedMinMaxValues[0] = value\n } else if (value > facetedMinMaxValues[1]) {\n facetedMinMaxValues[1] = value\n }\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 if (!facetedRowModel) return new Map()\n\n let facetedUniqueValues = new Map<any, number>()\n\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values =\n facetedRowModel.flatRows[i]!.getUniqueValues<number>(columnId)\n\n for (let j = 0; j < values.length; j++) {\n const value = values[j]!\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\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 return\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, row.id)\n }\n\n return row\n })\n }\n\n const columnId: string = 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 undefined,\n parentId\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 previous.push(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 if(!column) return\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]\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?.length) {\n row.subRows = sortData(row.subRows)\n }\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","_result","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","newColumnSizing","updateOffset","eventType","clientXPos","setColumnSizingInfo","_old$startOffset","_old$startSize","_ref3","headerSize","onMove","onEnd","mouseEvents","moveHandler","upHandler","document","removeEventListener","touchEvents","cancelable","preventDefault","stopPropagation","_e$touches$","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","maxLeafRowFilterDepth","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","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","getRenderValue","_cell$getValue","renderFallbackValue","original","rowIndex","parentId","_valuesCache","_uniqueValuesCache","hasOwnProperty","getUniqueValues","getLeafRows","getParentRow","getParentRows","parentRows","currentRow","parentRow","acc","filterRows","filterRowImpl","rowsToFilter","filterRow","_table$options$maxLea","newFilteredFlatRows","newFilteredRowsById","recurseFilterRows","newRow","filterRowModelFromLeafs","_table$options$maxLea2","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","_table$getColumn","facetedRowModel","_facetedRowModel$flat","firstValue","facetedMinMaxValues","j","preRowModel","filterableIds","facetedUniqueValues","_facetedUniqueValues$","has","set","get","resolvedColumnFilters","resolvedGlobalFilters","_filterFn$resolveFilt","globallyFilterableColumns","currentColumnFilter","currentGlobalFilter","_globalFilterFn$resol","filterMeta","__global__","existingGrouping","groupedFlatRows","groupedRowsById","groupUpRecursively","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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"}
|