@tanstack/table-core 9.0.0-alpha.46 → 9.0.0-alpha.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/core/cells/constructCell.cjs +4 -3
  2. package/dist/core/cells/constructCell.cjs.map +1 -1
  3. package/dist/core/cells/constructCell.js +4 -3
  4. package/dist/core/cells/constructCell.js.map +1 -1
  5. package/dist/core/columns/constructColumn.cjs +6 -4
  6. package/dist/core/columns/constructColumn.cjs.map +1 -1
  7. package/dist/core/columns/constructColumn.js +6 -4
  8. package/dist/core/columns/constructColumn.js.map +1 -1
  9. package/dist/core/columns/coreColumnsFeature.utils.cjs +10 -2
  10. package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
  11. package/dist/core/columns/coreColumnsFeature.utils.js +10 -2
  12. package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
  13. package/dist/core/headers/buildHeaderGroups.cjs +27 -19
  14. package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
  15. package/dist/core/headers/buildHeaderGroups.js +27 -19
  16. package/dist/core/headers/buildHeaderGroups.js.map +1 -1
  17. package/dist/core/headers/constructHeader.cjs +4 -3
  18. package/dist/core/headers/constructHeader.cjs.map +1 -1
  19. package/dist/core/headers/constructHeader.js +4 -3
  20. package/dist/core/headers/constructHeader.js.map +1 -1
  21. package/dist/core/headers/coreHeadersFeature.cjs +1 -6
  22. package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
  23. package/dist/core/headers/coreHeadersFeature.js +2 -7
  24. package/dist/core/headers/coreHeadersFeature.js.map +1 -1
  25. package/dist/core/headers/coreHeadersFeature.utils.cjs +20 -18
  26. package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
  27. package/dist/core/headers/coreHeadersFeature.utils.d.cts +1 -1
  28. package/dist/core/headers/coreHeadersFeature.utils.d.ts +1 -1
  29. package/dist/core/headers/coreHeadersFeature.utils.js +21 -19
  30. package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
  31. package/dist/core/reactivity/coreReactivityFeature.types.d.cts +4 -0
  32. package/dist/core/reactivity/coreReactivityFeature.types.d.ts +4 -0
  33. package/dist/core/rows/constructRow.cjs +8 -6
  34. package/dist/core/rows/constructRow.cjs.map +1 -1
  35. package/dist/core/rows/constructRow.js +8 -6
  36. package/dist/core/rows/constructRow.js.map +1 -1
  37. package/dist/core/rows/coreRowsFeature.utils.cjs +9 -4
  38. package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
  39. package/dist/core/rows/coreRowsFeature.utils.js +9 -4
  40. package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
  41. package/dist/core/table/constructTable.cjs +9 -5
  42. package/dist/core/table/constructTable.cjs.map +1 -1
  43. package/dist/core/table/constructTable.js +9 -5
  44. package/dist/core/table/constructTable.js.map +1 -1
  45. package/dist/core/table/coreTablesFeature.utils.cjs +5 -1
  46. package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
  47. package/dist/core/table/coreTablesFeature.utils.js +5 -1
  48. package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
  49. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs +8 -5
  50. package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
  51. package/dist/features/column-faceting/createFacetedMinMaxValues.js +8 -5
  52. package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
  53. package/dist/features/column-faceting/createFacetedRowModel.cjs +8 -3
  54. package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
  55. package/dist/features/column-faceting/createFacetedRowModel.js +8 -3
  56. package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
  57. package/dist/features/column-faceting/createFacetedUniqueValues.cjs +7 -4
  58. package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
  59. package/dist/features/column-faceting/createFacetedUniqueValues.js +7 -4
  60. package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
  61. package/dist/features/column-filtering/createFilteredRowModel.cjs +11 -5
  62. package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
  63. package/dist/features/column-filtering/createFilteredRowModel.js +11 -5
  64. package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
  65. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +16 -6
  66. package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
  67. package/dist/features/column-ordering/columnOrderingFeature.utils.js +16 -6
  68. package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
  69. package/dist/features/column-pinning/columnPinningFeature.utils.cjs +41 -24
  70. package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
  71. package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +5 -4
  72. package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +5 -4
  73. package/dist/features/column-pinning/columnPinningFeature.utils.js +42 -25
  74. package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
  75. package/dist/features/column-sizing/columnSizingFeature.cjs +28 -4
  76. package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
  77. package/dist/features/column-sizing/columnSizingFeature.js +28 -4
  78. package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
  79. package/dist/features/column-visibility/columnVisibilityFeature.cjs +23 -14
  80. package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
  81. package/dist/features/column-visibility/columnVisibilityFeature.js +24 -15
  82. package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
  83. package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +4 -0
  84. package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +4 -0
  85. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +40 -13
  86. package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
  87. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +12 -1
  88. package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +12 -1
  89. package/dist/features/column-visibility/columnVisibilityFeature.utils.js +40 -14
  90. package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
  91. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +2 -2
  92. package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
  93. package/dist/features/row-expanding/rowExpandingFeature.utils.js +2 -2
  94. package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
  95. package/dist/features/row-pinning/rowPinningFeature.utils.cjs +13 -7
  96. package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
  97. package/dist/features/row-pinning/rowPinningFeature.utils.js +13 -7
  98. package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
  99. package/dist/features/row-selection/rowSelectionFeature.utils.cjs +6 -3
  100. package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
  101. package/dist/features/row-selection/rowSelectionFeature.utils.js +6 -3
  102. package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
  103. package/dist/features/row-sorting/createSortedRowModel.cjs +13 -8
  104. package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
  105. package/dist/features/row-sorting/createSortedRowModel.js +13 -8
  106. package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
  107. package/dist/features/row-sorting/rowSortingFeature.utils.cjs +2 -2
  108. package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
  109. package/dist/features/row-sorting/rowSortingFeature.utils.js +2 -2
  110. package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
  111. package/dist/fns/aggregationFns.cjs +14 -7
  112. package/dist/fns/aggregationFns.cjs.map +1 -1
  113. package/dist/fns/aggregationFns.js +14 -8
  114. package/dist/fns/aggregationFns.js.map +1 -1
  115. package/dist/index.cjs +0 -4
  116. package/dist/index.d.cts +2 -2
  117. package/dist/index.d.ts +2 -2
  118. package/dist/index.js +2 -2
  119. package/dist/static-functions.cjs +1 -0
  120. package/dist/static-functions.d.cts +2 -2
  121. package/dist/static-functions.d.ts +2 -2
  122. package/dist/static-functions.js +2 -2
  123. package/dist/store-reactivity-bindings.cjs +1 -0
  124. package/dist/store-reactivity-bindings.cjs.map +1 -1
  125. package/dist/store-reactivity-bindings.js +1 -0
  126. package/dist/store-reactivity-bindings.js.map +1 -1
  127. package/dist/utils.cjs +18 -39
  128. package/dist/utils.cjs.map +1 -1
  129. package/dist/utils.d.cts +1 -23
  130. package/dist/utils.d.ts +1 -23
  131. package/dist/utils.js +19 -36
  132. package/dist/utils.js.map +1 -1
  133. package/package.json +1 -1
  134. package/src/core/cells/constructCell.ts +3 -2
  135. package/src/core/columns/constructColumn.ts +5 -3
  136. package/src/core/columns/coreColumnsFeature.utils.ts +6 -2
  137. package/src/core/headers/buildHeaderGroups.ts +29 -30
  138. package/src/core/headers/constructHeader.ts +3 -2
  139. package/src/core/headers/coreHeadersFeature.ts +2 -27
  140. package/src/core/headers/coreHeadersFeature.utils.ts +29 -43
  141. package/src/core/reactivity/coreReactivityFeature.types.ts +4 -0
  142. package/src/core/rows/constructRow.ts +6 -4
  143. package/src/core/rows/coreRowsFeature.utils.ts +11 -4
  144. package/src/core/table/constructTable.ts +6 -4
  145. package/src/core/table/coreTablesFeature.utils.ts +3 -1
  146. package/src/features/column-faceting/createFacetedMinMaxValues.ts +8 -10
  147. package/src/features/column-faceting/createFacetedRowModel.ts +10 -6
  148. package/src/features/column-faceting/createFacetedUniqueValues.ts +4 -3
  149. package/src/features/column-filtering/createFilteredRowModel.ts +14 -8
  150. package/src/features/column-ordering/columnOrderingFeature.utils.ts +14 -6
  151. package/src/features/column-pinning/columnPinningFeature.utils.ts +53 -37
  152. package/src/features/column-sizing/columnSizingFeature.ts +16 -0
  153. package/src/features/column-visibility/columnVisibilityFeature.ts +8 -0
  154. package/src/features/column-visibility/columnVisibilityFeature.types.ts +7 -0
  155. package/src/features/column-visibility/columnVisibilityFeature.utils.ts +50 -17
  156. package/src/features/row-expanding/rowExpandingFeature.utils.ts +2 -2
  157. package/src/features/row-pinning/rowPinningFeature.utils.ts +20 -18
  158. package/src/features/row-selection/rowSelectionFeature.utils.ts +20 -19
  159. package/src/features/row-sorting/createSortedRowModel.ts +16 -13
  160. package/src/features/row-sorting/rowSortingFeature.utils.ts +2 -2
  161. package/src/fns/aggregationFns.ts +20 -8
  162. package/src/store-reactivity-bindings.ts +1 -0
  163. package/src/utils.ts +19 -46
@@ -1 +1 @@
1
- {"version":3,"file":"createSortedRowModel.cjs","names":["tableMemo","table_autoResetPageIndex","column_getCanSort","column_getSortFn"],"sources":["../../../src/features/row-sorting/createSortedRowModel.ts"],"sourcesContent":["import { tableMemo } from '../../utils'\nimport { table_autoResetPageIndex } from '../row-pagination/rowPaginationFeature.utils'\nimport { column_getCanSort, column_getSortFn } from './rowSortingFeature.utils'\nimport type { Column_Internal } from '../../types/Column'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { RowModel } from '../../core/row-models/coreRowModelsFeature.types'\nimport type { Table, Table_Internal } from '../../types/Table'\nimport type { Row } from '../../types/Row'\nimport type { SortFn, SortFns } from './rowSortingFeature.types'\nimport type { RowData } from '../../types/type-utils'\n\n/**\n * Creates a memoized sorted row model factory.\n *\n * The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n */\nexport function createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n sortFns: Record<keyof SortFns, SortFn<TFeatures, TData>>,\n): (table: Table<TFeatures, TData>) => () => RowModel<TFeatures, TData> {\n return (_table) => {\n const table: Table_Internal<TFeatures, TData> = _table\n if (!table._rowModelFns.sortFns) table._rowModelFns.sortFns = sortFns\n return tableMemo({\n feature: 'rowSortingFeature',\n table,\n fnName: 'table.getSortedRowModel',\n memoDeps: () => [\n table.atoms.sorting?.get(),\n table.getPreSortedRowModel(),\n ],\n fn: () => _createSortedRowModel(table),\n onAfterUpdate: () => table_autoResetPageIndex(table),\n })\n }\n}\n\nfunction _createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData = any,\n>(table: Table_Internal<TFeatures, TData>): RowModel<TFeatures, TData> {\n const preSortedRowModel = table.getPreSortedRowModel()\n const sorting = table.atoms.sorting?.get()\n\n if (!preSortedRowModel.rows.length || !sorting?.length) {\n return preSortedRowModel\n }\n\n const sortedFlatRows: Array<Row<TFeatures, TData>> = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sorting.filter((sort) =>\n column_getCanSort(\n table.getColumn(sort.id) as Column_Internal<TFeatures, TData>,\n ),\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1 | 'first' | 'last'\n invertSorting?: boolean\n sortFn: SortFn<TFeatures, TData>\n }\n > = {}\n\n availableSorting.forEach((sortEntry) => {\n const column: Column_Internal<TFeatures, TData> | undefined =\n table.getColumn(sortEntry.id)\n if (!column) return\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortFn: column_getSortFn(column),\n }\n })\n\n const sortData = (rows: Array<Row<TFeatures, TData>>) => {\n // This will also perform a stable sorting using the row index\n // if needed.\n // Preserve prototype chain so methods like getValue() remain accessible\n const sortedData = rows.map((row) => {\n const cloned = Object.create(Object.getPrototypeOf(row))\n return Object.assign(cloned, row)\n })\n\n sortedData.sort((rowA, rowB) => {\n for (const sortEntry of availableSorting) {\n const columnInfo = columnInfoById[sortEntry.id]!\n const sortUndefined = columnInfo.sortUndefined\n const isDesc = sortEntry.desc\n\n let sortInt = 0\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = aValue === undefined\n const bUndefined = bValue === undefined\n\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1\n if (sortUndefined === 'last') return aUndefined ? 1 : -1\n sortInt =\n aUndefined && bUndefined\n ? 0\n : aUndefined\n ? sortUndefined\n : -sortUndefined\n }\n }\n\n if (sortInt === 0) {\n sortInt = columnInfo.sortFn(rowA, rowB, sortEntry.id)\n }\n\n // If sorting is non-zero, take care of desc and inversion\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 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(preSortedRowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: preSortedRowModel.rowsById,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,qBAId,SACsE;CACtE,QAAQ,WAAW;EACjB,MAAM,QAA0C;EAChD,IAAI,CAAC,MAAM,aAAa,SAAS,MAAM,aAAa,UAAU;EAC9D,OAAOA,wBAAU;GACf,SAAS;GACT;GACA,QAAQ;GACR,gBAAgB;;oCACd,MAAM,MAAM,qFAAS,KAAK,EAC1B,MAAM,sBAAsB,CAC7B;;GACD,UAAU,sBAAsB,MAAM;GACtC,qBAAqBC,4DAAyB,MAAM;GACrD,CAAC;;;AAIN,SAAS,sBAGP,OAAqE;;CACrE,MAAM,oBAAoB,MAAM,sBAAsB;CACtD,MAAM,mCAAU,MAAM,MAAM,uFAAS,KAAK;CAE1C,IAAI,CAAC,kBAAkB,KAAK,UAAU,oDAAC,QAAS,SAC9C,OAAO;CAGT,MAAM,iBAA+C,EAAE;CAGvD,MAAM,mBAAmB,QAAQ,QAAQ,SACvCC,kDACE,MAAM,UAAU,KAAK,GAAG,CACzB,CACF;CAED,MAAM,iBAOF,EAAE;CAEN,iBAAiB,SAAS,cAAc;EACtC,MAAM,SACJ,MAAM,UAAU,UAAU,GAAG;EAC/B,IAAI,CAAC,QAAQ;EAEb,eAAe,UAAU,MAAM;GAC7B,eAAe,OAAO,UAAU;GAChC,eAAe,OAAO,UAAU;GAChC,QAAQC,iDAAiB,OAAO;GACjC;GACD;CAEF,MAAM,YAAY,SAAuC;EAIvD,MAAM,aAAa,KAAK,KAAK,QAAQ;GAEnC,OAAO,OAAO,OADC,OAAO,OAAO,OAAO,eAAe,IAAI,CAC5B,EAAE,IAAI;IACjC;EAEF,WAAW,MAAM,MAAM,SAAS;GAC9B,KAAK,MAAM,aAAa,kBAAkB;IACxC,MAAM,aAAa,eAAe,UAAU;IAC5C,MAAM,gBAAgB,WAAW;IACjC,MAAM,SAAS,UAAU;IAEzB,IAAI,UAAU;IAGd,IAAI,eAAe;KACjB,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAC1C,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAE1C,MAAM,aAAa,WAAW;KAC9B,MAAM,aAAa,WAAW;KAE9B,IAAI,cAAc,YAAY;MAC5B,IAAI,kBAAkB,SAAS,OAAO,aAAa,KAAK;MACxD,IAAI,kBAAkB,QAAQ,OAAO,aAAa,IAAI;MACtD,UACE,cAAc,aACV,IACA,aACE,gBACA,CAAC;;;IAIb,IAAI,YAAY,GACd,UAAU,WAAW,OAAO,MAAM,MAAM,UAAU,GAAG;IAIvD,IAAI,YAAY,GAAG;KACjB,IAAI,QACF,WAAW;KAGb,IAAI,WAAW,eACb,WAAW;KAGb,OAAO;;;GAGX,OAAO,KAAK,QAAQ,KAAK;IACzB;EAGF,WAAW,SAAS,QAAQ;GAC1B,eAAe,KAAK,IAAI;GACxB,IAAI,IAAI,QAAQ,QACd,IAAI,UAAU,SAAS,IAAI,QAAQ;IAErC;EAEF,OAAO;;CAGT,OAAO;EACL,MAAM,SAAS,kBAAkB,KAAK;EACtC,UAAU;EACV,UAAU,kBAAkB;EAC7B"}
1
+ {"version":3,"file":"createSortedRowModel.cjs","names":["tableMemo","table_autoResetPageIndex","column_getCanSort","column_getSortFn"],"sources":["../../../src/features/row-sorting/createSortedRowModel.ts"],"sourcesContent":["import { tableMemo } from '../../utils'\nimport { table_autoResetPageIndex } from '../row-pagination/rowPaginationFeature.utils'\nimport { column_getCanSort, column_getSortFn } from './rowSortingFeature.utils'\nimport type { Column_Internal } from '../../types/Column'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { RowModel } from '../../core/row-models/coreRowModelsFeature.types'\nimport type { Table, Table_Internal } from '../../types/Table'\nimport type { Row } from '../../types/Row'\nimport type { SortFn, SortFns } from './rowSortingFeature.types'\nimport type { RowData } from '../../types/type-utils'\n\n/**\n * Creates a memoized sorted row model factory.\n *\n * The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n */\nexport function createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n sortFns: Record<keyof SortFns, SortFn<TFeatures, TData>>,\n): (table: Table<TFeatures, TData>) => () => RowModel<TFeatures, TData> {\n return (_table) => {\n const table: Table_Internal<TFeatures, TData> = _table\n if (!table._rowModelFns.sortFns) table._rowModelFns.sortFns = sortFns\n return tableMemo({\n feature: 'rowSortingFeature',\n table,\n fnName: 'table.getSortedRowModel',\n memoDeps: () => [\n table.atoms.sorting?.get(),\n table.getPreSortedRowModel(),\n ],\n fn: () => _createSortedRowModel(table),\n onAfterUpdate: () => table_autoResetPageIndex(table),\n })\n }\n}\n\nfunction _createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData = any,\n>(table: Table_Internal<TFeatures, TData>): RowModel<TFeatures, TData> {\n const preSortedRowModel = table.getPreSortedRowModel()\n const sorting = table.atoms.sorting?.get()\n\n if (!preSortedRowModel.rows.length || !sorting?.length) {\n return preSortedRowModel\n }\n\n const sortedFlatRows: Array<Row<TFeatures, TData>> = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sorting.filter((sort) =>\n column_getCanSort(\n table.getColumn(sort.id) as Column_Internal<TFeatures, TData>,\n ),\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1 | 'first' | 'last'\n invertSorting?: boolean\n sortFn: SortFn<TFeatures, TData>\n }\n > = {}\n\n availableSorting.forEach((sortEntry) => {\n const column: Column_Internal<TFeatures, TData> | undefined =\n table.getColumn(sortEntry.id)\n if (!column) return\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortFn: column_getSortFn(column),\n }\n })\n\n const sortData = (rows: Array<Row<TFeatures, TData>>) => {\n const sortedData = rows.slice()\n\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i++) {\n const sortEntry = availableSorting[i]!\n const columnInfo = columnInfoById[sortEntry.id]!\n const sortUndefined = columnInfo.sortUndefined\n const isDesc = sortEntry.desc\n\n let sortInt = 0\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = aValue === undefined\n const bUndefined = bValue === undefined\n\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1\n if (sortUndefined === 'last') return aUndefined ? 1 : -1\n sortInt =\n aUndefined && bUndefined\n ? 0\n : aUndefined\n ? sortUndefined\n : -sortUndefined\n }\n }\n\n if (sortInt === 0) {\n sortInt = columnInfo.sortFn(rowA, rowB, sortEntry.id)\n }\n\n // If sorting is non-zero, take care of desc and inversion\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 return rowA.index - rowB.index\n })\n\n // If there are sub-rows, sort them. Clone only rows that need mutation\n // (i.e. have subRows) so we don't corrupt the source row model.\n for (let i = 0; i < sortedData.length; i++) {\n const row = sortedData[i]!\n if (row.subRows.length) {\n // Preserve prototype chain so methods like getValue() remain accessible\n const cloned = Object.create(Object.getPrototypeOf(row))\n Object.assign(cloned, row)\n cloned.subRows = sortData(row.subRows)\n sortedData[i] = cloned\n sortedFlatRows.push(cloned)\n } else {\n sortedFlatRows.push(row)\n }\n }\n\n return sortedData\n }\n\n return {\n rows: sortData(preSortedRowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: preSortedRowModel.rowsById,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,qBAId,SACsE;CACtE,QAAQ,WAAW;EACjB,MAAM,QAA0C;EAChD,IAAI,CAAC,MAAM,aAAa,SAAS,MAAM,aAAa,UAAU;EAC9D,OAAOA,wBAAU;GACf,SAAS;GACT;GACA,QAAQ;GACR,gBAAgB;;oCACd,MAAM,MAAM,qFAAS,KAAK,EAC1B,MAAM,sBAAsB,CAC7B;;GACD,UAAU,sBAAsB,MAAM;GACtC,qBAAqBC,4DAAyB,MAAM;GACrD,CAAC;;;AAIN,SAAS,sBAGP,OAAqE;;CACrE,MAAM,oBAAoB,MAAM,sBAAsB;CACtD,MAAM,mCAAU,MAAM,MAAM,uFAAS,KAAK;CAE1C,IAAI,CAAC,kBAAkB,KAAK,UAAU,oDAAC,QAAS,SAC9C,OAAO;CAGT,MAAM,iBAA+C,EAAE;CAGvD,MAAM,mBAAmB,QAAQ,QAAQ,SACvCC,kDACE,MAAM,UAAU,KAAK,GAAG,CACzB,CACF;CAED,MAAM,iBAOF,EAAE;CAEN,iBAAiB,SAAS,cAAc;EACtC,MAAM,SACJ,MAAM,UAAU,UAAU,GAAG;EAC/B,IAAI,CAAC,QAAQ;EAEb,eAAe,UAAU,MAAM;GAC7B,eAAe,OAAO,UAAU;GAChC,eAAe,OAAO,UAAU;GAChC,QAAQC,iDAAiB,OAAO;GACjC;GACD;CAEF,MAAM,YAAY,SAAuC;EACvD,MAAM,aAAa,KAAK,OAAO;EAE/B,WAAW,MAAM,MAAM,SAAS;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;IAChD,MAAM,YAAY,iBAAiB;IACnC,MAAM,aAAa,eAAe,UAAU;IAC5C,MAAM,gBAAgB,WAAW;IACjC,MAAM,SAAS,UAAU;IAEzB,IAAI,UAAU;IAGd,IAAI,eAAe;KACjB,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAC1C,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAE1C,MAAM,aAAa,WAAW;KAC9B,MAAM,aAAa,WAAW;KAE9B,IAAI,cAAc,YAAY;MAC5B,IAAI,kBAAkB,SAAS,OAAO,aAAa,KAAK;MACxD,IAAI,kBAAkB,QAAQ,OAAO,aAAa,IAAI;MACtD,UACE,cAAc,aACV,IACA,aACE,gBACA,CAAC;;;IAIb,IAAI,YAAY,GACd,UAAU,WAAW,OAAO,MAAM,MAAM,UAAU,GAAG;IAIvD,IAAI,YAAY,GAAG;KACjB,IAAI,QACF,WAAW;KAGb,IAAI,WAAW,eACb,WAAW;KAGb,OAAO;;;GAGX,OAAO,KAAK,QAAQ,KAAK;IACzB;EAIF,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;GAC1C,MAAM,MAAM,WAAW;GACvB,IAAI,IAAI,QAAQ,QAAQ;IAEtB,MAAM,SAAS,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC;IACxD,OAAO,OAAO,QAAQ,IAAI;IAC1B,OAAO,UAAU,SAAS,IAAI,QAAQ;IACtC,WAAW,KAAK;IAChB,eAAe,KAAK,OAAO;UAE3B,eAAe,KAAK,IAAI;;EAI5B,OAAO;;CAGT,OAAO;EACL,MAAM,SAAS,kBAAkB,KAAK;EACtC,UAAU;EACV,UAAU,kBAAkB;EAC7B"}
@@ -43,11 +43,10 @@ function _createSortedRowModel(table) {
43
43
  };
44
44
  });
45
45
  const sortData = (rows) => {
46
- const sortedData = rows.map((row) => {
47
- return Object.assign(Object.create(Object.getPrototypeOf(row)), row);
48
- });
46
+ const sortedData = rows.slice();
49
47
  sortedData.sort((rowA, rowB) => {
50
- for (const sortEntry of availableSorting) {
48
+ for (let i = 0; i < availableSorting.length; i++) {
49
+ const sortEntry = availableSorting[i];
51
50
  const columnInfo = columnInfoById[sortEntry.id];
52
51
  const sortUndefined = columnInfo.sortUndefined;
53
52
  const isDesc = sortEntry.desc;
@@ -72,10 +71,16 @@ function _createSortedRowModel(table) {
72
71
  }
73
72
  return rowA.index - rowB.index;
74
73
  });
75
- sortedData.forEach((row) => {
76
- sortedFlatRows.push(row);
77
- if (row.subRows.length) row.subRows = sortData(row.subRows);
78
- });
74
+ for (let i = 0; i < sortedData.length; i++) {
75
+ const row = sortedData[i];
76
+ if (row.subRows.length) {
77
+ const cloned = Object.create(Object.getPrototypeOf(row));
78
+ Object.assign(cloned, row);
79
+ cloned.subRows = sortData(row.subRows);
80
+ sortedData[i] = cloned;
81
+ sortedFlatRows.push(cloned);
82
+ } else sortedFlatRows.push(row);
83
+ }
79
84
  return sortedData;
80
85
  };
81
86
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"createSortedRowModel.js","names":[],"sources":["../../../src/features/row-sorting/createSortedRowModel.ts"],"sourcesContent":["import { tableMemo } from '../../utils'\nimport { table_autoResetPageIndex } from '../row-pagination/rowPaginationFeature.utils'\nimport { column_getCanSort, column_getSortFn } from './rowSortingFeature.utils'\nimport type { Column_Internal } from '../../types/Column'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { RowModel } from '../../core/row-models/coreRowModelsFeature.types'\nimport type { Table, Table_Internal } from '../../types/Table'\nimport type { Row } from '../../types/Row'\nimport type { SortFn, SortFns } from './rowSortingFeature.types'\nimport type { RowData } from '../../types/type-utils'\n\n/**\n * Creates a memoized sorted row model factory.\n *\n * The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n */\nexport function createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n sortFns: Record<keyof SortFns, SortFn<TFeatures, TData>>,\n): (table: Table<TFeatures, TData>) => () => RowModel<TFeatures, TData> {\n return (_table) => {\n const table: Table_Internal<TFeatures, TData> = _table\n if (!table._rowModelFns.sortFns) table._rowModelFns.sortFns = sortFns\n return tableMemo({\n feature: 'rowSortingFeature',\n table,\n fnName: 'table.getSortedRowModel',\n memoDeps: () => [\n table.atoms.sorting?.get(),\n table.getPreSortedRowModel(),\n ],\n fn: () => _createSortedRowModel(table),\n onAfterUpdate: () => table_autoResetPageIndex(table),\n })\n }\n}\n\nfunction _createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData = any,\n>(table: Table_Internal<TFeatures, TData>): RowModel<TFeatures, TData> {\n const preSortedRowModel = table.getPreSortedRowModel()\n const sorting = table.atoms.sorting?.get()\n\n if (!preSortedRowModel.rows.length || !sorting?.length) {\n return preSortedRowModel\n }\n\n const sortedFlatRows: Array<Row<TFeatures, TData>> = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sorting.filter((sort) =>\n column_getCanSort(\n table.getColumn(sort.id) as Column_Internal<TFeatures, TData>,\n ),\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1 | 'first' | 'last'\n invertSorting?: boolean\n sortFn: SortFn<TFeatures, TData>\n }\n > = {}\n\n availableSorting.forEach((sortEntry) => {\n const column: Column_Internal<TFeatures, TData> | undefined =\n table.getColumn(sortEntry.id)\n if (!column) return\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortFn: column_getSortFn(column),\n }\n })\n\n const sortData = (rows: Array<Row<TFeatures, TData>>) => {\n // This will also perform a stable sorting using the row index\n // if needed.\n // Preserve prototype chain so methods like getValue() remain accessible\n const sortedData = rows.map((row) => {\n const cloned = Object.create(Object.getPrototypeOf(row))\n return Object.assign(cloned, row)\n })\n\n sortedData.sort((rowA, rowB) => {\n for (const sortEntry of availableSorting) {\n const columnInfo = columnInfoById[sortEntry.id]!\n const sortUndefined = columnInfo.sortUndefined\n const isDesc = sortEntry.desc\n\n let sortInt = 0\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = aValue === undefined\n const bUndefined = bValue === undefined\n\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1\n if (sortUndefined === 'last') return aUndefined ? 1 : -1\n sortInt =\n aUndefined && bUndefined\n ? 0\n : aUndefined\n ? sortUndefined\n : -sortUndefined\n }\n }\n\n if (sortInt === 0) {\n sortInt = columnInfo.sortFn(rowA, rowB, sortEntry.id)\n }\n\n // If sorting is non-zero, take care of desc and inversion\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 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(preSortedRowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: preSortedRowModel.rowsById,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,qBAId,SACsE;CACtE,QAAQ,WAAW;EACjB,MAAM,QAA0C;EAChD,IAAI,CAAC,MAAM,aAAa,SAAS,MAAM,aAAa,UAAU;EAC9D,OAAO,UAAU;GACf,SAAS;GACT;GACA,QAAQ;GACR,gBAAgB;;oCACd,MAAM,MAAM,qFAAS,KAAK,EAC1B,MAAM,sBAAsB,CAC7B;;GACD,UAAU,sBAAsB,MAAM;GACtC,qBAAqB,yBAAyB,MAAM;GACrD,CAAC;;;AAIN,SAAS,sBAGP,OAAqE;;CACrE,MAAM,oBAAoB,MAAM,sBAAsB;CACtD,MAAM,mCAAU,MAAM,MAAM,uFAAS,KAAK;CAE1C,IAAI,CAAC,kBAAkB,KAAK,UAAU,oDAAC,QAAS,SAC9C,OAAO;CAGT,MAAM,iBAA+C,EAAE;CAGvD,MAAM,mBAAmB,QAAQ,QAAQ,SACvC,kBACE,MAAM,UAAU,KAAK,GAAG,CACzB,CACF;CAED,MAAM,iBAOF,EAAE;CAEN,iBAAiB,SAAS,cAAc;EACtC,MAAM,SACJ,MAAM,UAAU,UAAU,GAAG;EAC/B,IAAI,CAAC,QAAQ;EAEb,eAAe,UAAU,MAAM;GAC7B,eAAe,OAAO,UAAU;GAChC,eAAe,OAAO,UAAU;GAChC,QAAQ,iBAAiB,OAAO;GACjC;GACD;CAEF,MAAM,YAAY,SAAuC;EAIvD,MAAM,aAAa,KAAK,KAAK,QAAQ;GAEnC,OAAO,OAAO,OADC,OAAO,OAAO,OAAO,eAAe,IAAI,CAC5B,EAAE,IAAI;IACjC;EAEF,WAAW,MAAM,MAAM,SAAS;GAC9B,KAAK,MAAM,aAAa,kBAAkB;IACxC,MAAM,aAAa,eAAe,UAAU;IAC5C,MAAM,gBAAgB,WAAW;IACjC,MAAM,SAAS,UAAU;IAEzB,IAAI,UAAU;IAGd,IAAI,eAAe;KACjB,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAC1C,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAE1C,MAAM,aAAa,WAAW;KAC9B,MAAM,aAAa,WAAW;KAE9B,IAAI,cAAc,YAAY;MAC5B,IAAI,kBAAkB,SAAS,OAAO,aAAa,KAAK;MACxD,IAAI,kBAAkB,QAAQ,OAAO,aAAa,IAAI;MACtD,UACE,cAAc,aACV,IACA,aACE,gBACA,CAAC;;;IAIb,IAAI,YAAY,GACd,UAAU,WAAW,OAAO,MAAM,MAAM,UAAU,GAAG;IAIvD,IAAI,YAAY,GAAG;KACjB,IAAI,QACF,WAAW;KAGb,IAAI,WAAW,eACb,WAAW;KAGb,OAAO;;;GAGX,OAAO,KAAK,QAAQ,KAAK;IACzB;EAGF,WAAW,SAAS,QAAQ;GAC1B,eAAe,KAAK,IAAI;GACxB,IAAI,IAAI,QAAQ,QACd,IAAI,UAAU,SAAS,IAAI,QAAQ;IAErC;EAEF,OAAO;;CAGT,OAAO;EACL,MAAM,SAAS,kBAAkB,KAAK;EACtC,UAAU;EACV,UAAU,kBAAkB;EAC7B"}
1
+ {"version":3,"file":"createSortedRowModel.js","names":[],"sources":["../../../src/features/row-sorting/createSortedRowModel.ts"],"sourcesContent":["import { tableMemo } from '../../utils'\nimport { table_autoResetPageIndex } from '../row-pagination/rowPaginationFeature.utils'\nimport { column_getCanSort, column_getSortFn } from './rowSortingFeature.utils'\nimport type { Column_Internal } from '../../types/Column'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { RowModel } from '../../core/row-models/coreRowModelsFeature.types'\nimport type { Table, Table_Internal } from '../../types/Table'\nimport type { Row } from '../../types/Row'\nimport type { SortFn, SortFns } from './rowSortingFeature.types'\nimport type { RowData } from '../../types/type-utils'\n\n/**\n * Creates a memoized sorted row model factory.\n *\n * The factory reads the relevant table state atoms and options, then returns a row model function used by the table row-model pipeline.\n */\nexport function createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n sortFns: Record<keyof SortFns, SortFn<TFeatures, TData>>,\n): (table: Table<TFeatures, TData>) => () => RowModel<TFeatures, TData> {\n return (_table) => {\n const table: Table_Internal<TFeatures, TData> = _table\n if (!table._rowModelFns.sortFns) table._rowModelFns.sortFns = sortFns\n return tableMemo({\n feature: 'rowSortingFeature',\n table,\n fnName: 'table.getSortedRowModel',\n memoDeps: () => [\n table.atoms.sorting?.get(),\n table.getPreSortedRowModel(),\n ],\n fn: () => _createSortedRowModel(table),\n onAfterUpdate: () => table_autoResetPageIndex(table),\n })\n }\n}\n\nfunction _createSortedRowModel<\n TFeatures extends TableFeatures,\n TData extends RowData = any,\n>(table: Table_Internal<TFeatures, TData>): RowModel<TFeatures, TData> {\n const preSortedRowModel = table.getPreSortedRowModel()\n const sorting = table.atoms.sorting?.get()\n\n if (!preSortedRowModel.rows.length || !sorting?.length) {\n return preSortedRowModel\n }\n\n const sortedFlatRows: Array<Row<TFeatures, TData>> = []\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sorting.filter((sort) =>\n column_getCanSort(\n table.getColumn(sort.id) as Column_Internal<TFeatures, TData>,\n ),\n )\n\n const columnInfoById: Record<\n string,\n {\n sortUndefined?: false | -1 | 1 | 'first' | 'last'\n invertSorting?: boolean\n sortFn: SortFn<TFeatures, TData>\n }\n > = {}\n\n availableSorting.forEach((sortEntry) => {\n const column: Column_Internal<TFeatures, TData> | undefined =\n table.getColumn(sortEntry.id)\n if (!column) return\n\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortFn: column_getSortFn(column),\n }\n })\n\n const sortData = (rows: Array<Row<TFeatures, TData>>) => {\n const sortedData = rows.slice()\n\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i++) {\n const sortEntry = availableSorting[i]!\n const columnInfo = columnInfoById[sortEntry.id]!\n const sortUndefined = columnInfo.sortUndefined\n const isDesc = sortEntry.desc\n\n let sortInt = 0\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id)\n const bValue = rowB.getValue(sortEntry.id)\n\n const aUndefined = aValue === undefined\n const bUndefined = bValue === undefined\n\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1\n if (sortUndefined === 'last') return aUndefined ? 1 : -1\n sortInt =\n aUndefined && bUndefined\n ? 0\n : aUndefined\n ? sortUndefined\n : -sortUndefined\n }\n }\n\n if (sortInt === 0) {\n sortInt = columnInfo.sortFn(rowA, rowB, sortEntry.id)\n }\n\n // If sorting is non-zero, take care of desc and inversion\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 return rowA.index - rowB.index\n })\n\n // If there are sub-rows, sort them. Clone only rows that need mutation\n // (i.e. have subRows) so we don't corrupt the source row model.\n for (let i = 0; i < sortedData.length; i++) {\n const row = sortedData[i]!\n if (row.subRows.length) {\n // Preserve prototype chain so methods like getValue() remain accessible\n const cloned = Object.create(Object.getPrototypeOf(row))\n Object.assign(cloned, row)\n cloned.subRows = sortData(row.subRows)\n sortedData[i] = cloned\n sortedFlatRows.push(cloned)\n } else {\n sortedFlatRows.push(row)\n }\n }\n\n return sortedData\n }\n\n return {\n rows: sortData(preSortedRowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: preSortedRowModel.rowsById,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,qBAId,SACsE;CACtE,QAAQ,WAAW;EACjB,MAAM,QAA0C;EAChD,IAAI,CAAC,MAAM,aAAa,SAAS,MAAM,aAAa,UAAU;EAC9D,OAAO,UAAU;GACf,SAAS;GACT;GACA,QAAQ;GACR,gBAAgB;;oCACd,MAAM,MAAM,qFAAS,KAAK,EAC1B,MAAM,sBAAsB,CAC7B;;GACD,UAAU,sBAAsB,MAAM;GACtC,qBAAqB,yBAAyB,MAAM;GACrD,CAAC;;;AAIN,SAAS,sBAGP,OAAqE;;CACrE,MAAM,oBAAoB,MAAM,sBAAsB;CACtD,MAAM,mCAAU,MAAM,MAAM,uFAAS,KAAK;CAE1C,IAAI,CAAC,kBAAkB,KAAK,UAAU,oDAAC,QAAS,SAC9C,OAAO;CAGT,MAAM,iBAA+C,EAAE;CAGvD,MAAM,mBAAmB,QAAQ,QAAQ,SACvC,kBACE,MAAM,UAAU,KAAK,GAAG,CACzB,CACF;CAED,MAAM,iBAOF,EAAE;CAEN,iBAAiB,SAAS,cAAc;EACtC,MAAM,SACJ,MAAM,UAAU,UAAU,GAAG;EAC/B,IAAI,CAAC,QAAQ;EAEb,eAAe,UAAU,MAAM;GAC7B,eAAe,OAAO,UAAU;GAChC,eAAe,OAAO,UAAU;GAChC,QAAQ,iBAAiB,OAAO;GACjC;GACD;CAEF,MAAM,YAAY,SAAuC;EACvD,MAAM,aAAa,KAAK,OAAO;EAE/B,WAAW,MAAM,MAAM,SAAS;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;IAChD,MAAM,YAAY,iBAAiB;IACnC,MAAM,aAAa,eAAe,UAAU;IAC5C,MAAM,gBAAgB,WAAW;IACjC,MAAM,SAAS,UAAU;IAEzB,IAAI,UAAU;IAGd,IAAI,eAAe;KACjB,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAC1C,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG;KAE1C,MAAM,aAAa,WAAW;KAC9B,MAAM,aAAa,WAAW;KAE9B,IAAI,cAAc,YAAY;MAC5B,IAAI,kBAAkB,SAAS,OAAO,aAAa,KAAK;MACxD,IAAI,kBAAkB,QAAQ,OAAO,aAAa,IAAI;MACtD,UACE,cAAc,aACV,IACA,aACE,gBACA,CAAC;;;IAIb,IAAI,YAAY,GACd,UAAU,WAAW,OAAO,MAAM,MAAM,UAAU,GAAG;IAIvD,IAAI,YAAY,GAAG;KACjB,IAAI,QACF,WAAW;KAGb,IAAI,WAAW,eACb,WAAW;KAGb,OAAO;;;GAGX,OAAO,KAAK,QAAQ,KAAK;IACzB;EAIF,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;GAC1C,MAAM,MAAM,WAAW;GACvB,IAAI,IAAI,QAAQ,QAAQ;IAEtB,MAAM,SAAS,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC;IACxD,OAAO,OAAO,QAAQ,IAAI;IAC1B,OAAO,UAAU,SAAS,IAAI,QAAQ;IACtC,WAAW,KAAK;IAChB,eAAe,KAAK,OAAO;UAE3B,eAAe,KAAK,IAAI;;EAI5B,OAAO;;CAGT,OAAO;EACL,MAAM,SAAS,kBAAkB,KAAK;EACtC,UAAU;EACV,UAAU,kBAAkB;EAC7B"}
@@ -58,8 +58,8 @@ function column_getAutoSortFn(column) {
58
58
  let sortFn;
59
59
  const firstRows = column.table.getFilteredRowModel().flatRows.slice(10);
60
60
  let isString = false;
61
- for (const row of firstRows) {
62
- const value = row.getValue(column.id);
61
+ for (let i = 0; i < firstRows.length; i++) {
62
+ const value = firstRows[i].getValue(column.id);
63
63
  if (Object.prototype.toString.call(value) === "[object Date]") sortFn = sortFns === null || sortFns === void 0 ? void 0 : sortFns.datetime;
64
64
  if (typeof value === "string") {
65
65
  isString = true;
@@ -1 +1 @@
1
- {"version":3,"file":"rowSortingFeature.utils.cjs","names":["cloneState","reSplitAlphaNumeric","sortFn_basic","isFunction"],"sources":["../../../src/features/row-sorting/rowSortingFeature.utils.ts"],"sourcesContent":["import { reSplitAlphaNumeric, sortFn_basic } from '../../fns/sortFns'\nimport { cloneState, isFunction } from '../../utils'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Column_Internal } from '../../types/Column'\nimport type {\n SortDirection,\n SortFn,\n SortingState,\n} from './rowSortingFeature.types'\n\n// State Utils\n\n/**\n * Returns the default sorting state.\n *\n * Feature constructors use this value to initialize the table state or option defaults when no user value is provided.\n *\n * @example\n * ```ts\n * const initialValue = getDefaultSortingState()\n * ```\n */\nexport function getDefaultSortingState(): SortingState {\n return []\n}\n\n/**\n * Updates the table's sorting state slice.\n *\n * The updater follows TanStack Table updater semantics and is routed through the corresponding `on*Change` option or backing atom.\n *\n * @example\n * ```ts\n * table_setSorting(table, (old) => old)\n * ```\n */\nexport function table_setSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, updater: Updater<SortingState>) {\n table.options.onSortingChange?.(updater)\n}\n\n/**\n * Resets the table's sorting state slice.\n *\n * By default the reset uses `table.initialState`; when supported, a blank/default reset bypasses the saved initial value.\n *\n * @example\n * ```ts\n * table_resetSorting(table)\n * table_resetSorting(table, true)\n * ```\n */\nexport function table_resetSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setSorting(\n table,\n defaultState ? [] : cloneState(table.initialState.sorting ?? []),\n )\n}\n\n// Column Utils\n\n/**\n * Infers sort fn for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortFn(column)\n * ```\n */\nexport function column_getAutoSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n let sortFn: SortFn<TFeatures, TData> | undefined\n\n const firstRows = column.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 sortFn = sortFns?.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n sortFn = sortFns?.alphanumeric\n }\n }\n }\n\n if (isString) {\n sortFn = sortFns?.text\n }\n\n return sortFn ?? sortFn_basic\n}\n\n/**\n * Infers sort dir for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortDir(column)\n * ```\n */\nexport function column_getAutoSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const firstRow = column.table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow ? firstRow.getValue(column.id) : undefined\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n}\n\n/**\n * Returns sort fn for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortFn(column)\n * ```\n */\nexport function column_getSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n return isFunction(column.columnDef.sortFn)\n ? column.columnDef.sortFn\n : column.columnDef.sortFn === 'auto'\n ? column_getAutoSortFn(column)\n : (sortFns?.[column.columnDef.sortFn as string] ?? sortFn_basic)\n}\n\n/**\n * Toggles sorting for a column.\n *\n * The update is applied through the owning table state slice and respects the feature options for that column.\n *\n * @example\n * ```ts\n * column_toggleSorting(column)\n * ```\n */\nexport function column_toggleSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n desc?: boolean,\n multi?: boolean,\n) {\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(column)\n const hasManualValue = typeof desc !== 'undefined'\n\n table_setSorting(column.table, (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 const nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old.length && column_getCanMultiSort(column) && 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 (column.table.options.maxMultiSortColCount ??\n 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/**\n * Returns first sort dir for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getFirstSortDir(column)\n * ```\n */\nexport function column_getFirstSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n column.table.options.sortDescFirst ??\n column_getAutoSortDir(column) === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n}\n\n/**\n * Returns next sorting order for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getNextSortingOrder(column)\n * ```\n */\nexport function column_getNextSortingOrder<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>, multi?: boolean) {\n const firstSortDirection = column_getFirstSortDir(column)\n const isSorted = column_getIsSorted(column)\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (column.table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? (column.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/**\n * Returns whether a column can use sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanSort(column)\n * ```\n */\nexport function column_getCanSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (column.table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n}\n\n/**\n * Returns whether a column can use multi sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanMultiSort(column)\n * ```\n */\nexport function column_getCanMultiSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): boolean {\n return (\n column.columnDef.enableMultiSort ??\n column.table.options.enableMultiSort ??\n !!column.accessorFn\n )\n}\n\n/**\n * Returns is sorted for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getIsSorted(column)\n * ```\n */\nexport function column_getIsSorted<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): false | SortDirection {\n const columnSort = column.table.atoms.sorting\n ?.get()\n ?.find((d) => d.id === column.id)\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n}\n\n/**\n * Returns sort index for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortIndex(column)\n * ```\n */\nexport function column_getSortIndex<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): number {\n return (\n column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ??\n -1\n )\n}\n\n/**\n * Clear Sorting. for a column.\n *\n * This is the static implementation behind the matching column instance API.\n *\n * @example\n * ```ts\n * const value = column_clearSorting(column)\n * ```\n */\nexport function column_clearSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n // clear sorting for just 1 column\n table_setSorting(column.table, (old) =>\n old.length ? old.filter((d) => d.id !== column.id) : [],\n )\n}\n\n/**\n * Returns an event handler for toggling sorting handler.\n *\n * The handler is intended for direct use in column header controls such as buttons or checkboxes.\n *\n * @example\n * ```ts\n * const value = column_getToggleSortingHandler(column)\n * ```\n */\nexport function column_getToggleSortingHandler<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const canSort = column_getCanSort(column)\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column_toggleSorting(\n column,\n\n undefined,\n column_getCanMultiSort(column)\n ? column.table.options.isMultiSortEvent?.(e)\n : false,\n )\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"rowSortingFeature.utils.cjs","names":["cloneState","reSplitAlphaNumeric","sortFn_basic","isFunction"],"sources":["../../../src/features/row-sorting/rowSortingFeature.utils.ts"],"sourcesContent":["import { reSplitAlphaNumeric, sortFn_basic } from '../../fns/sortFns'\nimport { cloneState, isFunction } from '../../utils'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Column_Internal } from '../../types/Column'\nimport type {\n SortDirection,\n SortFn,\n SortingState,\n} from './rowSortingFeature.types'\n\n// State Utils\n\n/**\n * Returns the default sorting state.\n *\n * Feature constructors use this value to initialize the table state or option defaults when no user value is provided.\n *\n * @example\n * ```ts\n * const initialValue = getDefaultSortingState()\n * ```\n */\nexport function getDefaultSortingState(): SortingState {\n return []\n}\n\n/**\n * Updates the table's sorting state slice.\n *\n * The updater follows TanStack Table updater semantics and is routed through the corresponding `on*Change` option or backing atom.\n *\n * @example\n * ```ts\n * table_setSorting(table, (old) => old)\n * ```\n */\nexport function table_setSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, updater: Updater<SortingState>) {\n table.options.onSortingChange?.(updater)\n}\n\n/**\n * Resets the table's sorting state slice.\n *\n * By default the reset uses `table.initialState`; when supported, a blank/default reset bypasses the saved initial value.\n *\n * @example\n * ```ts\n * table_resetSorting(table)\n * table_resetSorting(table, true)\n * ```\n */\nexport function table_resetSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setSorting(\n table,\n defaultState ? [] : cloneState(table.initialState.sorting ?? []),\n )\n}\n\n// Column Utils\n\n/**\n * Infers sort fn for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortFn(column)\n * ```\n */\nexport function column_getAutoSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n let sortFn: SortFn<TFeatures, TData> | undefined\n\n const firstRows = column.table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (let i = 0; i < firstRows.length; i++) {\n const value = firstRows[i]!.getValue(column.id)\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n sortFn = sortFns?.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n sortFn = sortFns?.alphanumeric\n }\n }\n }\n\n if (isString) {\n sortFn = sortFns?.text\n }\n\n return sortFn ?? sortFn_basic\n}\n\n/**\n * Infers sort dir for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortDir(column)\n * ```\n */\nexport function column_getAutoSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const firstRow = column.table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow ? firstRow.getValue(column.id) : undefined\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n}\n\n/**\n * Returns sort fn for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortFn(column)\n * ```\n */\nexport function column_getSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n return isFunction(column.columnDef.sortFn)\n ? column.columnDef.sortFn\n : column.columnDef.sortFn === 'auto'\n ? column_getAutoSortFn(column)\n : (sortFns?.[column.columnDef.sortFn as string] ?? sortFn_basic)\n}\n\n/**\n * Toggles sorting for a column.\n *\n * The update is applied through the owning table state slice and respects the feature options for that column.\n *\n * @example\n * ```ts\n * column_toggleSorting(column)\n * ```\n */\nexport function column_toggleSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n desc?: boolean,\n multi?: boolean,\n) {\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(column)\n const hasManualValue = typeof desc !== 'undefined'\n\n table_setSorting(column.table, (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 const nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old.length && column_getCanMultiSort(column) && 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 (column.table.options.maxMultiSortColCount ??\n 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/**\n * Returns first sort dir for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getFirstSortDir(column)\n * ```\n */\nexport function column_getFirstSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n column.table.options.sortDescFirst ??\n column_getAutoSortDir(column) === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n}\n\n/**\n * Returns next sorting order for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getNextSortingOrder(column)\n * ```\n */\nexport function column_getNextSortingOrder<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>, multi?: boolean) {\n const firstSortDirection = column_getFirstSortDir(column)\n const isSorted = column_getIsSorted(column)\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (column.table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? (column.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/**\n * Returns whether a column can use sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanSort(column)\n * ```\n */\nexport function column_getCanSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (column.table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n}\n\n/**\n * Returns whether a column can use multi sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanMultiSort(column)\n * ```\n */\nexport function column_getCanMultiSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): boolean {\n return (\n column.columnDef.enableMultiSort ??\n column.table.options.enableMultiSort ??\n !!column.accessorFn\n )\n}\n\n/**\n * Returns is sorted for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getIsSorted(column)\n * ```\n */\nexport function column_getIsSorted<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): false | SortDirection {\n const columnSort = column.table.atoms.sorting\n ?.get()\n ?.find((d) => d.id === column.id)\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n}\n\n/**\n * Returns sort index for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortIndex(column)\n * ```\n */\nexport function column_getSortIndex<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): number {\n return (\n column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ??\n -1\n )\n}\n\n/**\n * Clear Sorting. for a column.\n *\n * This is the static implementation behind the matching column instance API.\n *\n * @example\n * ```ts\n * const value = column_clearSorting(column)\n * ```\n */\nexport function column_clearSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n // clear sorting for just 1 column\n table_setSorting(column.table, (old) =>\n old.length ? old.filter((d) => d.id !== column.id) : [],\n )\n}\n\n/**\n * Returns an event handler for toggling sorting handler.\n *\n * The handler is intended for direct use in column header controls such as buttons or checkboxes.\n *\n * @example\n * ```ts\n * const value = column_getToggleSortingHandler(column)\n * ```\n */\nexport function column_getToggleSortingHandler<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const canSort = column_getCanSort(column)\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column_toggleSorting(\n column,\n\n undefined,\n column_getCanMultiSort(column)\n ? column.table.options.isMultiSortEvent?.(e)\n : false,\n )\n }\n}\n"],"mappings":"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"}
@@ -58,8 +58,8 @@ function column_getAutoSortFn(column) {
58
58
  let sortFn;
59
59
  const firstRows = column.table.getFilteredRowModel().flatRows.slice(10);
60
60
  let isString = false;
61
- for (const row of firstRows) {
62
- const value = row.getValue(column.id);
61
+ for (let i = 0; i < firstRows.length; i++) {
62
+ const value = firstRows[i].getValue(column.id);
63
63
  if (Object.prototype.toString.call(value) === "[object Date]") sortFn = sortFns === null || sortFns === void 0 ? void 0 : sortFns.datetime;
64
64
  if (typeof value === "string") {
65
65
  isString = true;
@@ -1 +1 @@
1
- {"version":3,"file":"rowSortingFeature.utils.js","names":[],"sources":["../../../src/features/row-sorting/rowSortingFeature.utils.ts"],"sourcesContent":["import { reSplitAlphaNumeric, sortFn_basic } from '../../fns/sortFns'\nimport { cloneState, isFunction } from '../../utils'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Column_Internal } from '../../types/Column'\nimport type {\n SortDirection,\n SortFn,\n SortingState,\n} from './rowSortingFeature.types'\n\n// State Utils\n\n/**\n * Returns the default sorting state.\n *\n * Feature constructors use this value to initialize the table state or option defaults when no user value is provided.\n *\n * @example\n * ```ts\n * const initialValue = getDefaultSortingState()\n * ```\n */\nexport function getDefaultSortingState(): SortingState {\n return []\n}\n\n/**\n * Updates the table's sorting state slice.\n *\n * The updater follows TanStack Table updater semantics and is routed through the corresponding `on*Change` option or backing atom.\n *\n * @example\n * ```ts\n * table_setSorting(table, (old) => old)\n * ```\n */\nexport function table_setSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, updater: Updater<SortingState>) {\n table.options.onSortingChange?.(updater)\n}\n\n/**\n * Resets the table's sorting state slice.\n *\n * By default the reset uses `table.initialState`; when supported, a blank/default reset bypasses the saved initial value.\n *\n * @example\n * ```ts\n * table_resetSorting(table)\n * table_resetSorting(table, true)\n * ```\n */\nexport function table_resetSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setSorting(\n table,\n defaultState ? [] : cloneState(table.initialState.sorting ?? []),\n )\n}\n\n// Column Utils\n\n/**\n * Infers sort fn for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortFn(column)\n * ```\n */\nexport function column_getAutoSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n let sortFn: SortFn<TFeatures, TData> | undefined\n\n const firstRows = column.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 sortFn = sortFns?.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n sortFn = sortFns?.alphanumeric\n }\n }\n }\n\n if (isString) {\n sortFn = sortFns?.text\n }\n\n return sortFn ?? sortFn_basic\n}\n\n/**\n * Infers sort dir for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortDir(column)\n * ```\n */\nexport function column_getAutoSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const firstRow = column.table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow ? firstRow.getValue(column.id) : undefined\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n}\n\n/**\n * Returns sort fn for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortFn(column)\n * ```\n */\nexport function column_getSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n return isFunction(column.columnDef.sortFn)\n ? column.columnDef.sortFn\n : column.columnDef.sortFn === 'auto'\n ? column_getAutoSortFn(column)\n : (sortFns?.[column.columnDef.sortFn as string] ?? sortFn_basic)\n}\n\n/**\n * Toggles sorting for a column.\n *\n * The update is applied through the owning table state slice and respects the feature options for that column.\n *\n * @example\n * ```ts\n * column_toggleSorting(column)\n * ```\n */\nexport function column_toggleSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n desc?: boolean,\n multi?: boolean,\n) {\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(column)\n const hasManualValue = typeof desc !== 'undefined'\n\n table_setSorting(column.table, (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 const nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old.length && column_getCanMultiSort(column) && 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 (column.table.options.maxMultiSortColCount ??\n 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/**\n * Returns first sort dir for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getFirstSortDir(column)\n * ```\n */\nexport function column_getFirstSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n column.table.options.sortDescFirst ??\n column_getAutoSortDir(column) === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n}\n\n/**\n * Returns next sorting order for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getNextSortingOrder(column)\n * ```\n */\nexport function column_getNextSortingOrder<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>, multi?: boolean) {\n const firstSortDirection = column_getFirstSortDir(column)\n const isSorted = column_getIsSorted(column)\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (column.table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? (column.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/**\n * Returns whether a column can use sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanSort(column)\n * ```\n */\nexport function column_getCanSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (column.table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n}\n\n/**\n * Returns whether a column can use multi sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanMultiSort(column)\n * ```\n */\nexport function column_getCanMultiSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): boolean {\n return (\n column.columnDef.enableMultiSort ??\n column.table.options.enableMultiSort ??\n !!column.accessorFn\n )\n}\n\n/**\n * Returns is sorted for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getIsSorted(column)\n * ```\n */\nexport function column_getIsSorted<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): false | SortDirection {\n const columnSort = column.table.atoms.sorting\n ?.get()\n ?.find((d) => d.id === column.id)\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n}\n\n/**\n * Returns sort index for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortIndex(column)\n * ```\n */\nexport function column_getSortIndex<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): number {\n return (\n column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ??\n -1\n )\n}\n\n/**\n * Clear Sorting. for a column.\n *\n * This is the static implementation behind the matching column instance API.\n *\n * @example\n * ```ts\n * const value = column_clearSorting(column)\n * ```\n */\nexport function column_clearSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n // clear sorting for just 1 column\n table_setSorting(column.table, (old) =>\n old.length ? old.filter((d) => d.id !== column.id) : [],\n )\n}\n\n/**\n * Returns an event handler for toggling sorting handler.\n *\n * The handler is intended for direct use in column header controls such as buttons or checkboxes.\n *\n * @example\n * ```ts\n * const value = column_getToggleSortingHandler(column)\n * ```\n */\nexport function column_getToggleSortingHandler<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const canSort = column_getCanSort(column)\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column_toggleSorting(\n column,\n\n undefined,\n column_getCanMultiSort(column)\n ? column.table.options.isMultiSortEvent?.(e)\n : false,\n )\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"rowSortingFeature.utils.js","names":[],"sources":["../../../src/features/row-sorting/rowSortingFeature.utils.ts"],"sourcesContent":["import { reSplitAlphaNumeric, sortFn_basic } from '../../fns/sortFns'\nimport { cloneState, isFunction } from '../../utils'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Column_Internal } from '../../types/Column'\nimport type {\n SortDirection,\n SortFn,\n SortingState,\n} from './rowSortingFeature.types'\n\n// State Utils\n\n/**\n * Returns the default sorting state.\n *\n * Feature constructors use this value to initialize the table state or option defaults when no user value is provided.\n *\n * @example\n * ```ts\n * const initialValue = getDefaultSortingState()\n * ```\n */\nexport function getDefaultSortingState(): SortingState {\n return []\n}\n\n/**\n * Updates the table's sorting state slice.\n *\n * The updater follows TanStack Table updater semantics and is routed through the corresponding `on*Change` option or backing atom.\n *\n * @example\n * ```ts\n * table_setSorting(table, (old) => old)\n * ```\n */\nexport function table_setSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, updater: Updater<SortingState>) {\n table.options.onSortingChange?.(updater)\n}\n\n/**\n * Resets the table's sorting state slice.\n *\n * By default the reset uses `table.initialState`; when supported, a blank/default reset bypasses the saved initial value.\n *\n * @example\n * ```ts\n * table_resetSorting(table)\n * table_resetSorting(table, true)\n * ```\n */\nexport function table_resetSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setSorting(\n table,\n defaultState ? [] : cloneState(table.initialState.sorting ?? []),\n )\n}\n\n// Column Utils\n\n/**\n * Infers sort fn for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortFn(column)\n * ```\n */\nexport function column_getAutoSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n let sortFn: SortFn<TFeatures, TData> | undefined\n\n const firstRows = column.table.getFilteredRowModel().flatRows.slice(10)\n\n let isString = false\n\n for (let i = 0; i < firstRows.length; i++) {\n const value = firstRows[i]!.getValue(column.id)\n\n if (Object.prototype.toString.call(value) === '[object Date]') {\n sortFn = sortFns?.datetime\n }\n\n if (typeof value === 'string') {\n isString = true\n\n if (value.split(reSplitAlphaNumeric).length > 1) {\n sortFn = sortFns?.alphanumeric\n }\n }\n }\n\n if (isString) {\n sortFn = sortFns?.text\n }\n\n return sortFn ?? sortFn_basic\n}\n\n/**\n * Infers sort dir for a column.\n *\n * The inference uses the column definition, table options, and sampled row values when needed.\n *\n * @example\n * ```ts\n * const value = column_getAutoSortDir(column)\n * ```\n */\nexport function column_getAutoSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const firstRow = column.table.getFilteredRowModel().flatRows[0]\n\n const value = firstRow ? firstRow.getValue(column.id) : undefined\n\n if (typeof value === 'string') {\n return 'asc'\n }\n\n return 'desc'\n}\n\n/**\n * Returns sort fn for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortFn(column)\n * ```\n */\nexport function column_getSortFn<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): SortFn<TFeatures, TData> {\n const sortFns: Record<string, SortFn<TFeatures, TData>> | undefined =\n column.table._rowModelFns.sortFns\n\n return isFunction(column.columnDef.sortFn)\n ? column.columnDef.sortFn\n : column.columnDef.sortFn === 'auto'\n ? column_getAutoSortFn(column)\n : (sortFns?.[column.columnDef.sortFn as string] ?? sortFn_basic)\n}\n\n/**\n * Toggles sorting for a column.\n *\n * The update is applied through the owning table state slice and respects the feature options for that column.\n *\n * @example\n * ```ts\n * column_toggleSorting(column)\n * ```\n */\nexport function column_toggleSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n desc?: boolean,\n multi?: boolean,\n) {\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(column)\n const hasManualValue = typeof desc !== 'undefined'\n\n table_setSorting(column.table, (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 const nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc'\n\n // Multi-mode\n if (old.length && column_getCanMultiSort(column) && 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 (column.table.options.maxMultiSortColCount ??\n 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/**\n * Returns first sort dir for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getFirstSortDir(column)\n * ```\n */\nexport function column_getFirstSortDir<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const sortDescFirst =\n column.columnDef.sortDescFirst ??\n column.table.options.sortDescFirst ??\n column_getAutoSortDir(column) === 'desc'\n return sortDescFirst ? 'desc' : 'asc'\n}\n\n/**\n * Returns next sorting order for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getNextSortingOrder(column)\n * ```\n */\nexport function column_getNextSortingOrder<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>, multi?: boolean) {\n const firstSortDirection = column_getFirstSortDir(column)\n const isSorted = column_getIsSorted(column)\n\n if (!isSorted) {\n return firstSortDirection\n }\n\n if (\n isSorted !== firstSortDirection &&\n (column.table.options.enableSortingRemoval ?? true) && // If enableSortRemove, enable in general\n (multi ? (column.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/**\n * Returns whether a column can use sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanSort(column)\n * ```\n */\nexport function column_getCanSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n return (\n (column.columnDef.enableSorting ?? true) &&\n (column.table.options.enableSorting ?? true) &&\n !!column.accessorFn\n )\n}\n\n/**\n * Returns whether a column can use multi sort.\n *\n * This combines column options, table options, and any required accessor or feature state for the capability.\n *\n * @example\n * ```ts\n * const value = column_getCanMultiSort(column)\n * ```\n */\nexport function column_getCanMultiSort<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): boolean {\n return (\n column.columnDef.enableMultiSort ??\n column.table.options.enableMultiSort ??\n !!column.accessorFn\n )\n}\n\n/**\n * Returns is sorted for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getIsSorted(column)\n * ```\n */\nexport function column_getIsSorted<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): false | SortDirection {\n const columnSort = column.table.atoms.sorting\n ?.get()\n ?.find((d) => d.id === column.id)\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc'\n}\n\n/**\n * Returns sort index for a column.\n *\n * This derives the value from the column definition, table options, and the feature state atoms registered on the table.\n *\n * @example\n * ```ts\n * const value = column_getSortIndex(column)\n * ```\n */\nexport function column_getSortIndex<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): number {\n return (\n column.table.atoms.sorting?.get()?.findIndex((d) => d.id === column.id) ??\n -1\n )\n}\n\n/**\n * Clear Sorting. for a column.\n *\n * This is the static implementation behind the matching column instance API.\n *\n * @example\n * ```ts\n * const value = column_clearSorting(column)\n * ```\n */\nexport function column_clearSorting<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n // clear sorting for just 1 column\n table_setSorting(column.table, (old) =>\n old.length ? old.filter((d) => d.id !== column.id) : [],\n )\n}\n\n/**\n * Returns an event handler for toggling sorting handler.\n *\n * The handler is intended for direct use in column header controls such as buttons or checkboxes.\n *\n * @example\n * ```ts\n * const value = column_getToggleSortingHandler(column)\n * ```\n */\nexport function column_getToggleSortingHandler<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const canSort = column_getCanSort(column)\n\n return (e: unknown) => {\n if (!canSort) return\n ;(e as any).persist?.()\n column_toggleSorting(\n column,\n\n undefined,\n column_getCanMultiSort(column)\n ? column.table.options.isMultiSortEvent?.(e)\n : false,\n )\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- const require_utils = require('../utils.cjs');
2
1
 
3
2
  //#region src/fns/aggregationFns.ts
4
3
  /**
@@ -74,24 +73,32 @@ const aggregationFn_mean = (columnId, leafRows) => {
74
73
  */
75
74
  const aggregationFn_median = (columnId, leafRows) => {
76
75
  if (!leafRows.length) return;
77
- const values = leafRows.map((row) => row.getValue(columnId));
78
- if (!require_utils.isNumberArray(values)) return;
76
+ const values = new Array(leafRows.length);
77
+ for (let i = 0; i < leafRows.length; i++) {
78
+ const v = leafRows[i].getValue(columnId);
79
+ if (typeof v !== "number") return;
80
+ values[i] = v;
81
+ }
79
82
  if (values.length === 1) return values[0];
80
83
  const mid = Math.floor(values.length / 2);
81
- const nums = values.sort((a, b) => a - b);
82
- return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;
84
+ values.sort((a, b) => a - b);
85
+ return values.length % 2 !== 0 ? values[mid] : (values[mid - 1] + values[mid]) / 2;
83
86
  };
84
87
  /**
85
88
  * Aggregation function for finding the unique values of a column.
86
89
  */
87
90
  const aggregationFn_unique = (columnId, leafRows) => {
88
- return Array.from(new Set(leafRows.map((d) => d.getValue(columnId))).values());
91
+ const set = /* @__PURE__ */ new Set();
92
+ for (let i = 0; i < leafRows.length; i++) set.add(leafRows[i].getValue(columnId));
93
+ return Array.from(set.values());
89
94
  };
90
95
  /**
91
96
  * Aggregation function for finding the count of unique values of a column.
92
97
  */
93
98
  const aggregationFn_uniqueCount = (columnId, leafRows) => {
94
- return new Set(leafRows.map((d) => d.getValue(columnId))).size;
99
+ const set = /* @__PURE__ */ new Set();
100
+ for (let i = 0; i < leafRows.length; i++) set.add(leafRows[i].getValue(columnId));
101
+ return set.size;
95
102
  };
96
103
  /**
97
104
  * Aggregation function for counting the number of rows in a column.
@@ -1 +1 @@
1
- {"version":3,"file":"aggregationFns.cjs","names":["isNumberArray"],"sources":["../../src/fns/aggregationFns.ts"],"sourcesContent":["import { isNumberArray } from '../utils'\nimport type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { AggregationFn } from '../features/column-grouping/columnGroupingFeature.types'\n\n/**\n * Aggregation function for summing up the values of a column.\n */\nexport const aggregationFn_sum: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sumValue, next) => {\n const nextValue = next.getValue(columnId)\n return sumValue + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\n/**\n * Aggregation function for finding the minimum value of a column.\n */\nexport const aggregationFn_min: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n\n if (\n value != null &&\n typeof value === 'number' &&\n (minValue === undefined || value < minValue)\n ) {\n minValue = value\n }\n })\n\n return minValue\n}\n\n/**\n * Aggregation function for finding the maximum value of a column.\n */\nexport const aggregationFn_max: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (\n value != null &&\n typeof value === 'number' &&\n (maxValue === undefined || value > maxValue)\n ) {\n maxValue = value\n }\n })\n\n return maxValue\n}\n\n/**\n * Aggregation function for finding the extent (min and max) of a column.\n */\nexport const aggregationFn_extent: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n if (minValue === undefined) {\n minValue = maxValue = value\n } else {\n if (minValue > value) minValue = value\n if (maxValue! < value) maxValue = value\n }\n }\n })\n\n return [minValue, maxValue]\n}\n\n/**\n * Aggregation function for finding the mean (average) of a column.\n */\nexport const aggregationFn_mean: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n let count = 0\n let sumValue = 0\n\n leafRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n ++count\n sumValue += value\n } else if (value != null) {\n const numValue = +value\n if (!Number.isNaN(numValue)) {\n ++count\n sumValue += numValue\n }\n }\n })\n\n if (count) return sumValue / count\n\n return\n}\n\n/**\n * Aggregation function for finding the median value of a column.\n */\nexport const aggregationFn_median: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n if (!leafRows.length) {\n return\n }\n\n const values = leafRows.map((row) => row.getValue(columnId))\n if (!isNumberArray(values)) {\n return\n }\n if (values.length === 1) {\n return values[0]\n }\n\n const mid = Math.floor(values.length / 2)\n const nums = values.sort((a, b) => a - b)\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1]! + nums[mid]!) / 2\n}\n\n/**\n * Aggregation function for finding the unique values of a column.\n */\nexport const aggregationFn_unique: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return Array.from(new Set(leafRows.map((d) => d.getValue(columnId))).values())\n}\n\n/**\n * Aggregation function for finding the count of unique values of a column.\n */\nexport const aggregationFn_uniqueCount: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return new Set(leafRows.map((d) => d.getValue(columnId))).size\n}\n\n/**\n * Aggregation function for counting the number of rows in a column.\n */\nexport const aggregationFn_count: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n _columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return leafRows.length\n}\n\n/**\n * The built-in aggregation function registry.\n *\n * Pass this object to grouped row model creation or extend it with custom aggregation functions for grouped columns.\n */\nexport const aggregationFns = {\n sum: aggregationFn_sum,\n min: aggregationFn_min,\n max: aggregationFn_max,\n extent: aggregationFn_extent,\n mean: aggregationFn_mean,\n median: aggregationFn_median,\n unique: aggregationFn_unique,\n uniqueCount: aggregationFn_uniqueCount,\n count: aggregationFn_count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n"],"mappings":";;;;;;AASA,MAAa,qBAIX,UACA,WACA,cACG;CAGH,OAAO,UAAU,QAAQ,UAAU,SAAS;EAC1C,MAAM,YAAY,KAAK,SAAS,SAAS;EACzC,OAAO,YAAY,OAAO,cAAc,WAAW,YAAY;IAC9D,EAAE;;;;;AAMP,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EAEpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,wBAIX,UACA,WACA,cACG;CACH,IAAI;CACJ,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UACpC,IAAI,aAAa,QACf,WAAW,WAAW;OACjB;GACL,IAAI,WAAW,OAAO,WAAW;GACjC,IAAI,WAAY,OAAO,WAAW;;GAGtC;CAEF,OAAO,CAAC,UAAU,SAAS;;;;;AAM7B,MAAa,sBAIX,UACA,aACG;CACH,IAAI,QAAQ;CACZ,IAAI,WAAW;CAEf,SAAS,SAAS,QAAQ;EACxB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UAAU;GAC9C,EAAE;GACF,YAAY;SACP,IAAI,SAAS,MAAM;GACxB,MAAM,WAAW,CAAC;GAClB,IAAI,CAAC,OAAO,MAAM,SAAS,EAAE;IAC3B,EAAE;IACF,YAAY;;;GAGhB;CAEF,IAAI,OAAO,OAAO,WAAW;;;;;AAQ/B,MAAa,wBAIX,UACA,aACG;CACH,IAAI,CAAC,SAAS,QACZ;CAGF,MAAM,SAAS,SAAS,KAAK,QAAQ,IAAI,SAAS,SAAS,CAAC;CAC5D,IAAI,CAACA,4BAAc,OAAO,EACxB;CAEF,IAAI,OAAO,WAAW,GACpB,OAAO,OAAO;CAGhB,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE;CACzC,MAAM,OAAO,OAAO,MAAM,GAAG,MAAM,IAAI,EAAE;CACzC,OAAO,OAAO,SAAS,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAM,KAAK,QAAS;;;;;AAM/E,MAAa,wBAIX,UACA,aACG;CACH,OAAO,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;;;;;AAMhF,MAAa,6BAIX,UACA,aACG;CACH,OAAO,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC;;;;;AAM5D,MAAa,uBAIX,WACA,aACG;CACH,OAAO,SAAS;;;;;;;AAQlB,MAAa,iBAAiB;CAC5B,KAAK;CACL,KAAK;CACL,KAAK;CACL,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,aAAa;CACb,OAAO;CACR"}
1
+ {"version":3,"file":"aggregationFns.cjs","names":[],"sources":["../../src/fns/aggregationFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { AggregationFn } from '../features/column-grouping/columnGroupingFeature.types'\n\n/**\n * Aggregation function for summing up the values of a column.\n */\nexport const aggregationFn_sum: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sumValue, next) => {\n const nextValue = next.getValue(columnId)\n return sumValue + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\n/**\n * Aggregation function for finding the minimum value of a column.\n */\nexport const aggregationFn_min: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n\n if (\n value != null &&\n typeof value === 'number' &&\n (minValue === undefined || value < minValue)\n ) {\n minValue = value\n }\n })\n\n return minValue\n}\n\n/**\n * Aggregation function for finding the maximum value of a column.\n */\nexport const aggregationFn_max: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (\n value != null &&\n typeof value === 'number' &&\n (maxValue === undefined || value > maxValue)\n ) {\n maxValue = value\n }\n })\n\n return maxValue\n}\n\n/**\n * Aggregation function for finding the extent (min and max) of a column.\n */\nexport const aggregationFn_extent: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n if (minValue === undefined) {\n minValue = maxValue = value\n } else {\n if (minValue > value) minValue = value\n if (maxValue! < value) maxValue = value\n }\n }\n })\n\n return [minValue, maxValue]\n}\n\n/**\n * Aggregation function for finding the mean (average) of a column.\n */\nexport const aggregationFn_mean: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n let count = 0\n let sumValue = 0\n\n leafRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n ++count\n sumValue += value\n } else if (value != null) {\n const numValue = +value\n if (!Number.isNaN(numValue)) {\n ++count\n sumValue += numValue\n }\n }\n })\n\n if (count) return sumValue / count\n\n return\n}\n\n/**\n * Aggregation function for finding the median value of a column.\n */\nexport const aggregationFn_median: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n if (!leafRows.length) {\n return\n }\n\n const values: Array<number> = new Array(leafRows.length)\n for (let i = 0; i < leafRows.length; i++) {\n const v = leafRows[i]!.getValue(columnId)\n if (typeof v !== 'number') return\n values[i] = v\n }\n\n if (values.length === 1) {\n return values[0]\n }\n\n const mid = Math.floor(values.length / 2)\n values.sort((a, b) => a - b)\n return values.length % 2 !== 0\n ? values[mid]\n : (values[mid - 1]! + values[mid]!) / 2\n}\n\n/**\n * Aggregation function for finding the unique values of a column.\n */\nexport const aggregationFn_unique: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n const set = new Set<unknown>()\n for (let i = 0; i < leafRows.length; i++) {\n set.add(leafRows[i]!.getValue(columnId))\n }\n return Array.from(set.values())\n}\n\n/**\n * Aggregation function for finding the count of unique values of a column.\n */\nexport const aggregationFn_uniqueCount: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n const set = new Set<unknown>()\n for (let i = 0; i < leafRows.length; i++) {\n set.add(leafRows[i]!.getValue(columnId))\n }\n return set.size\n}\n\n/**\n * Aggregation function for counting the number of rows in a column.\n */\nexport const aggregationFn_count: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n _columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return leafRows.length\n}\n\n/**\n * The built-in aggregation function registry.\n *\n * Pass this object to grouped row model creation or extend it with custom aggregation functions for grouped columns.\n */\nexport const aggregationFns = {\n sum: aggregationFn_sum,\n min: aggregationFn_min,\n max: aggregationFn_max,\n extent: aggregationFn_extent,\n mean: aggregationFn_mean,\n median: aggregationFn_median,\n unique: aggregationFn_unique,\n uniqueCount: aggregationFn_uniqueCount,\n count: aggregationFn_count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n"],"mappings":";;;;;AAQA,MAAa,qBAIX,UACA,WACA,cACG;CAGH,OAAO,UAAU,QAAQ,UAAU,SAAS;EAC1C,MAAM,YAAY,KAAK,SAAS,SAAS;EACzC,OAAO,YAAY,OAAO,cAAc,WAAW,YAAY;IAC9D,EAAE;;;;;AAMP,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EAEpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,wBAIX,UACA,WACA,cACG;CACH,IAAI;CACJ,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UACpC,IAAI,aAAa,QACf,WAAW,WAAW;OACjB;GACL,IAAI,WAAW,OAAO,WAAW;GACjC,IAAI,WAAY,OAAO,WAAW;;GAGtC;CAEF,OAAO,CAAC,UAAU,SAAS;;;;;AAM7B,MAAa,sBAIX,UACA,aACG;CACH,IAAI,QAAQ;CACZ,IAAI,WAAW;CAEf,SAAS,SAAS,QAAQ;EACxB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UAAU;GAC9C,EAAE;GACF,YAAY;SACP,IAAI,SAAS,MAAM;GACxB,MAAM,WAAW,CAAC;GAClB,IAAI,CAAC,OAAO,MAAM,SAAS,EAAE;IAC3B,EAAE;IACF,YAAY;;;GAGhB;CAEF,IAAI,OAAO,OAAO,WAAW;;;;;AAQ/B,MAAa,wBAIX,UACA,aACG;CACH,IAAI,CAAC,SAAS,QACZ;CAGF,MAAM,SAAwB,IAAI,MAAM,SAAS,OAAO;CACxD,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,IAAI,SAAS,GAAI,SAAS,SAAS;EACzC,IAAI,OAAO,MAAM,UAAU;EAC3B,OAAO,KAAK;;CAGd,IAAI,OAAO,WAAW,GACpB,OAAO,OAAO;CAGhB,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE;CACzC,OAAO,MAAM,GAAG,MAAM,IAAI,EAAE;CAC5B,OAAO,OAAO,SAAS,MAAM,IACzB,OAAO,QACN,OAAO,MAAM,KAAM,OAAO,QAAS;;;;;AAM1C,MAAa,wBAIX,UACA,aACG;CACH,MAAM,sBAAM,IAAI,KAAc;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,IAAI,SAAS,GAAI,SAAS,SAAS,CAAC;CAE1C,OAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;;;;;AAMjC,MAAa,6BAIX,UACA,aACG;CACH,MAAM,sBAAM,IAAI,KAAc;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,IAAI,SAAS,GAAI,SAAS,SAAS,CAAC;CAE1C,OAAO,IAAI;;;;;AAMb,MAAa,uBAIX,WACA,aACG;CACH,OAAO,SAAS;;;;;;;AAQlB,MAAa,iBAAiB;CAC5B,KAAK;CACL,KAAK;CACL,KAAK;CACL,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,aAAa;CACb,OAAO;CACR"}
@@ -1,5 +1,3 @@
1
- import { isNumberArray } from "../utils.js";
2
-
3
1
  //#region src/fns/aggregationFns.ts
4
2
  /**
5
3
  * Aggregation function for summing up the values of a column.
@@ -74,24 +72,32 @@ const aggregationFn_mean = (columnId, leafRows) => {
74
72
  */
75
73
  const aggregationFn_median = (columnId, leafRows) => {
76
74
  if (!leafRows.length) return;
77
- const values = leafRows.map((row) => row.getValue(columnId));
78
- if (!isNumberArray(values)) return;
75
+ const values = new Array(leafRows.length);
76
+ for (let i = 0; i < leafRows.length; i++) {
77
+ const v = leafRows[i].getValue(columnId);
78
+ if (typeof v !== "number") return;
79
+ values[i] = v;
80
+ }
79
81
  if (values.length === 1) return values[0];
80
82
  const mid = Math.floor(values.length / 2);
81
- const nums = values.sort((a, b) => a - b);
82
- return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;
83
+ values.sort((a, b) => a - b);
84
+ return values.length % 2 !== 0 ? values[mid] : (values[mid - 1] + values[mid]) / 2;
83
85
  };
84
86
  /**
85
87
  * Aggregation function for finding the unique values of a column.
86
88
  */
87
89
  const aggregationFn_unique = (columnId, leafRows) => {
88
- return Array.from(new Set(leafRows.map((d) => d.getValue(columnId))).values());
90
+ const set = /* @__PURE__ */ new Set();
91
+ for (let i = 0; i < leafRows.length; i++) set.add(leafRows[i].getValue(columnId));
92
+ return Array.from(set.values());
89
93
  };
90
94
  /**
91
95
  * Aggregation function for finding the count of unique values of a column.
92
96
  */
93
97
  const aggregationFn_uniqueCount = (columnId, leafRows) => {
94
- return new Set(leafRows.map((d) => d.getValue(columnId))).size;
98
+ const set = /* @__PURE__ */ new Set();
99
+ for (let i = 0; i < leafRows.length; i++) set.add(leafRows[i].getValue(columnId));
100
+ return set.size;
95
101
  };
96
102
  /**
97
103
  * Aggregation function for counting the number of rows in a column.
@@ -1 +1 @@
1
- {"version":3,"file":"aggregationFns.js","names":[],"sources":["../../src/fns/aggregationFns.ts"],"sourcesContent":["import { isNumberArray } from '../utils'\nimport type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { AggregationFn } from '../features/column-grouping/columnGroupingFeature.types'\n\n/**\n * Aggregation function for summing up the values of a column.\n */\nexport const aggregationFn_sum: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sumValue, next) => {\n const nextValue = next.getValue(columnId)\n return sumValue + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\n/**\n * Aggregation function for finding the minimum value of a column.\n */\nexport const aggregationFn_min: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n\n if (\n value != null &&\n typeof value === 'number' &&\n (minValue === undefined || value < minValue)\n ) {\n minValue = value\n }\n })\n\n return minValue\n}\n\n/**\n * Aggregation function for finding the maximum value of a column.\n */\nexport const aggregationFn_max: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (\n value != null &&\n typeof value === 'number' &&\n (maxValue === undefined || value > maxValue)\n ) {\n maxValue = value\n }\n })\n\n return maxValue\n}\n\n/**\n * Aggregation function for finding the extent (min and max) of a column.\n */\nexport const aggregationFn_extent: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n if (minValue === undefined) {\n minValue = maxValue = value\n } else {\n if (minValue > value) minValue = value\n if (maxValue! < value) maxValue = value\n }\n }\n })\n\n return [minValue, maxValue]\n}\n\n/**\n * Aggregation function for finding the mean (average) of a column.\n */\nexport const aggregationFn_mean: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n let count = 0\n let sumValue = 0\n\n leafRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n ++count\n sumValue += value\n } else if (value != null) {\n const numValue = +value\n if (!Number.isNaN(numValue)) {\n ++count\n sumValue += numValue\n }\n }\n })\n\n if (count) return sumValue / count\n\n return\n}\n\n/**\n * Aggregation function for finding the median value of a column.\n */\nexport const aggregationFn_median: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n if (!leafRows.length) {\n return\n }\n\n const values = leafRows.map((row) => row.getValue(columnId))\n if (!isNumberArray(values)) {\n return\n }\n if (values.length === 1) {\n return values[0]\n }\n\n const mid = Math.floor(values.length / 2)\n const nums = values.sort((a, b) => a - b)\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1]! + nums[mid]!) / 2\n}\n\n/**\n * Aggregation function for finding the unique values of a column.\n */\nexport const aggregationFn_unique: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return Array.from(new Set(leafRows.map((d) => d.getValue(columnId))).values())\n}\n\n/**\n * Aggregation function for finding the count of unique values of a column.\n */\nexport const aggregationFn_uniqueCount: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return new Set(leafRows.map((d) => d.getValue(columnId))).size\n}\n\n/**\n * Aggregation function for counting the number of rows in a column.\n */\nexport const aggregationFn_count: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n _columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return leafRows.length\n}\n\n/**\n * The built-in aggregation function registry.\n *\n * Pass this object to grouped row model creation or extend it with custom aggregation functions for grouped columns.\n */\nexport const aggregationFns = {\n sum: aggregationFn_sum,\n min: aggregationFn_min,\n max: aggregationFn_max,\n extent: aggregationFn_extent,\n mean: aggregationFn_mean,\n median: aggregationFn_median,\n unique: aggregationFn_unique,\n uniqueCount: aggregationFn_uniqueCount,\n count: aggregationFn_count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n"],"mappings":";;;;;;AASA,MAAa,qBAIX,UACA,WACA,cACG;CAGH,OAAO,UAAU,QAAQ,UAAU,SAAS;EAC1C,MAAM,YAAY,KAAK,SAAS,SAAS;EACzC,OAAO,YAAY,OAAO,cAAc,WAAW,YAAY;IAC9D,EAAE;;;;;AAMP,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EAEpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,wBAIX,UACA,WACA,cACG;CACH,IAAI;CACJ,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UACpC,IAAI,aAAa,QACf,WAAW,WAAW;OACjB;GACL,IAAI,WAAW,OAAO,WAAW;GACjC,IAAI,WAAY,OAAO,WAAW;;GAGtC;CAEF,OAAO,CAAC,UAAU,SAAS;;;;;AAM7B,MAAa,sBAIX,UACA,aACG;CACH,IAAI,QAAQ;CACZ,IAAI,WAAW;CAEf,SAAS,SAAS,QAAQ;EACxB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UAAU;GAC9C,EAAE;GACF,YAAY;SACP,IAAI,SAAS,MAAM;GACxB,MAAM,WAAW,CAAC;GAClB,IAAI,CAAC,OAAO,MAAM,SAAS,EAAE;IAC3B,EAAE;IACF,YAAY;;;GAGhB;CAEF,IAAI,OAAO,OAAO,WAAW;;;;;AAQ/B,MAAa,wBAIX,UACA,aACG;CACH,IAAI,CAAC,SAAS,QACZ;CAGF,MAAM,SAAS,SAAS,KAAK,QAAQ,IAAI,SAAS,SAAS,CAAC;CAC5D,IAAI,CAAC,cAAc,OAAO,EACxB;CAEF,IAAI,OAAO,WAAW,GACpB,OAAO,OAAO;CAGhB,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE;CACzC,MAAM,OAAO,OAAO,MAAM,GAAG,MAAM,IAAI,EAAE;CACzC,OAAO,OAAO,SAAS,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAM,KAAK,QAAS;;;;;AAM/E,MAAa,wBAIX,UACA,aACG;CACH,OAAO,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;;;;;AAMhF,MAAa,6BAIX,UACA,aACG;CACH,OAAO,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,SAAS,SAAS,CAAC,CAAC,CAAC;;;;;AAM5D,MAAa,uBAIX,WACA,aACG;CACH,OAAO,SAAS;;;;;;;AAQlB,MAAa,iBAAiB;CAC5B,KAAK;CACL,KAAK;CACL,KAAK;CACL,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,aAAa;CACb,OAAO;CACR"}
1
+ {"version":3,"file":"aggregationFns.js","names":[],"sources":["../../src/fns/aggregationFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { AggregationFn } from '../features/column-grouping/columnGroupingFeature.types'\n\n/**\n * Aggregation function for summing up the values of a column.\n */\nexport const aggregationFn_sum: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sumValue, next) => {\n const nextValue = next.getValue(columnId)\n return sumValue + (typeof nextValue === 'number' ? nextValue : 0)\n }, 0)\n}\n\n/**\n * Aggregation function for finding the minimum value of a column.\n */\nexport const aggregationFn_min: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n\n if (\n value != null &&\n typeof value === 'number' &&\n (minValue === undefined || value < minValue)\n ) {\n minValue = value\n }\n })\n\n return minValue\n}\n\n/**\n * Aggregation function for finding the maximum value of a column.\n */\nexport const aggregationFn_max: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (\n value != null &&\n typeof value === 'number' &&\n (maxValue === undefined || value > maxValue)\n ) {\n maxValue = value\n }\n })\n\n return maxValue\n}\n\n/**\n * Aggregation function for finding the extent (min and max) of a column.\n */\nexport const aggregationFn_extent: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n _leafRows: Array<Row<any, any>>,\n childRows: Array<Row<any, any>>,\n) => {\n let minValue: number | undefined\n let maxValue: number | undefined\n\n childRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n if (minValue === undefined) {\n minValue = maxValue = value\n } else {\n if (minValue > value) minValue = value\n if (maxValue! < value) maxValue = value\n }\n }\n })\n\n return [minValue, maxValue]\n}\n\n/**\n * Aggregation function for finding the mean (average) of a column.\n */\nexport const aggregationFn_mean: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n let count = 0\n let sumValue = 0\n\n leafRows.forEach((row) => {\n const value = row.getValue(columnId)\n if (value != null && typeof value === 'number') {\n ++count\n sumValue += value\n } else if (value != null) {\n const numValue = +value\n if (!Number.isNaN(numValue)) {\n ++count\n sumValue += numValue\n }\n }\n })\n\n if (count) return sumValue / count\n\n return\n}\n\n/**\n * Aggregation function for finding the median value of a column.\n */\nexport const aggregationFn_median: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n if (!leafRows.length) {\n return\n }\n\n const values: Array<number> = new Array(leafRows.length)\n for (let i = 0; i < leafRows.length; i++) {\n const v = leafRows[i]!.getValue(columnId)\n if (typeof v !== 'number') return\n values[i] = v\n }\n\n if (values.length === 1) {\n return values[0]\n }\n\n const mid = Math.floor(values.length / 2)\n values.sort((a, b) => a - b)\n return values.length % 2 !== 0\n ? values[mid]\n : (values[mid - 1]! + values[mid]!) / 2\n}\n\n/**\n * Aggregation function for finding the unique values of a column.\n */\nexport const aggregationFn_unique: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n const set = new Set<unknown>()\n for (let i = 0; i < leafRows.length; i++) {\n set.add(leafRows[i]!.getValue(columnId))\n }\n return Array.from(set.values())\n}\n\n/**\n * Aggregation function for finding the count of unique values of a column.\n */\nexport const aggregationFn_uniqueCount: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n const set = new Set<unknown>()\n for (let i = 0; i < leafRows.length; i++) {\n set.add(leafRows[i]!.getValue(columnId))\n }\n return set.size\n}\n\n/**\n * Aggregation function for counting the number of rows in a column.\n */\nexport const aggregationFn_count: AggregationFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n _columnId: string,\n leafRows: Array<Row<any, any>>,\n) => {\n return leafRows.length\n}\n\n/**\n * The built-in aggregation function registry.\n *\n * Pass this object to grouped row model creation or extend it with custom aggregation functions for grouped columns.\n */\nexport const aggregationFns = {\n sum: aggregationFn_sum,\n min: aggregationFn_min,\n max: aggregationFn_max,\n extent: aggregationFn_extent,\n mean: aggregationFn_mean,\n median: aggregationFn_median,\n unique: aggregationFn_unique,\n uniqueCount: aggregationFn_uniqueCount,\n count: aggregationFn_count,\n}\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n"],"mappings":";;;;AAQA,MAAa,qBAIX,UACA,WACA,cACG;CAGH,OAAO,UAAU,QAAQ,UAAU,SAAS;EAC1C,MAAM,YAAY,KAAK,SAAS,SAAS;EACzC,OAAO,YAAY,OAAO,cAAc,WAAW,YAAY;IAC9D,EAAE;;;;;AAMP,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EAEpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,qBAIX,UACA,WACA,cACG;CACH,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IACE,SAAS,QACT,OAAO,UAAU,aAChB,aAAa,UAAa,QAAQ,WAEnC,WAAW;GAEb;CAEF,OAAO;;;;;AAMT,MAAa,wBAIX,UACA,WACA,cACG;CACH,IAAI;CACJ,IAAI;CAEJ,UAAU,SAAS,QAAQ;EACzB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UACpC,IAAI,aAAa,QACf,WAAW,WAAW;OACjB;GACL,IAAI,WAAW,OAAO,WAAW;GACjC,IAAI,WAAY,OAAO,WAAW;;GAGtC;CAEF,OAAO,CAAC,UAAU,SAAS;;;;;AAM7B,MAAa,sBAIX,UACA,aACG;CACH,IAAI,QAAQ;CACZ,IAAI,WAAW;CAEf,SAAS,SAAS,QAAQ;EACxB,MAAM,QAAQ,IAAI,SAAS,SAAS;EACpC,IAAI,SAAS,QAAQ,OAAO,UAAU,UAAU;GAC9C,EAAE;GACF,YAAY;SACP,IAAI,SAAS,MAAM;GACxB,MAAM,WAAW,CAAC;GAClB,IAAI,CAAC,OAAO,MAAM,SAAS,EAAE;IAC3B,EAAE;IACF,YAAY;;;GAGhB;CAEF,IAAI,OAAO,OAAO,WAAW;;;;;AAQ/B,MAAa,wBAIX,UACA,aACG;CACH,IAAI,CAAC,SAAS,QACZ;CAGF,MAAM,SAAwB,IAAI,MAAM,SAAS,OAAO;CACxD,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,IAAI,SAAS,GAAI,SAAS,SAAS;EACzC,IAAI,OAAO,MAAM,UAAU;EAC3B,OAAO,KAAK;;CAGd,IAAI,OAAO,WAAW,GACpB,OAAO,OAAO;CAGhB,MAAM,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE;CACzC,OAAO,MAAM,GAAG,MAAM,IAAI,EAAE;CAC5B,OAAO,OAAO,SAAS,MAAM,IACzB,OAAO,QACN,OAAO,MAAM,KAAM,OAAO,QAAS;;;;;AAM1C,MAAa,wBAIX,UACA,aACG;CACH,MAAM,sBAAM,IAAI,KAAc;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,IAAI,SAAS,GAAI,SAAS,SAAS,CAAC;CAE1C,OAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;;;;;AAMjC,MAAa,6BAIX,UACA,aACG;CACH,MAAM,sBAAM,IAAI,KAAc;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,IAAI,SAAS,GAAI,SAAS,SAAS,CAAC;CAE1C,OAAO,IAAI;;;;;AAMb,MAAa,uBAIX,WACA,aACG;CACH,OAAO,SAAS;;;;;;;AAQlB,MAAa,iBAAiB;CAC5B,KAAK;CACL,KAAK;CACL,KAAK;CACL,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,aAAa;CACb,OAAO;CACR"}
package/dist/index.cjs CHANGED
@@ -44,7 +44,6 @@ const require_createExpandedRowModel = require('./features/row-expanding/createE
44
44
  const require_createPaginatedRowModel = require('./features/row-pagination/createPaginatedRowModel.cjs');
45
45
  const require_createSortedRowModel = require('./features/row-sorting/createSortedRowModel.cjs');
46
46
 
47
- exports.$internalMemoFnMeta = require_utils.$internalMemoFnMeta;
48
47
  exports.aggregationFn_count = require_aggregationFns.aggregationFn_count;
49
48
  exports.aggregationFn_extent = require_aggregationFns.aggregationFn_extent;
50
49
  exports.aggregationFn_max = require_aggregationFns.aggregationFn_max;
@@ -131,13 +130,10 @@ exports.flattenBy = require_utils.flattenBy;
131
130
  exports.functionalUpdate = require_utils.functionalUpdate;
132
131
  exports.getFunctionNameInfo = require_utils.getFunctionNameInfo;
133
132
  exports.getInitialTableState = require_constructTable.getInitialTableState;
134
- exports.getMemoFnMeta = require_utils.getMemoFnMeta;
135
133
  exports.globalFilteringFeature = require_globalFilteringFeature.globalFilteringFeature;
136
134
  exports.isFunction = require_utils.isFunction;
137
- exports.isNumberArray = require_utils.isNumberArray;
138
135
  exports.makeStateUpdater = require_utils.makeStateUpdater;
139
136
  exports.memo = require_utils.memo;
140
- exports.noop = require_utils.noop;
141
137
  exports.reSplitAlphaNumeric = require_sortFns.reSplitAlphaNumeric;
142
138
  exports.rowExpandingFeature = require_rowExpandingFeature.rowExpandingFeature;
143
139
  exports.rowPaginationFeature = require_rowPaginationFeature.rowPaginationFeature;
package/dist/index.d.cts CHANGED
@@ -59,7 +59,7 @@ import { Cell, Cell_Core, Cell_Plugins } from "./types/Cell.cjs";
59
59
  import { ColumnHelper, createColumnHelper } from "./helpers/columnHelper.cjs";
60
60
  import { tableFeatures } from "./helpers/tableFeatures.cjs";
61
61
  import { tableOptions } from "./helpers/tableOptions.cjs";
62
- import { $internalMemoFnMeta, API, APIObject, MemoFnMeta, PrototypeAPI, PrototypeAPIObject, assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, cloneState, flattenBy, functionalUpdate, getFunctionNameInfo, getMemoFnMeta, isFunction, isNumberArray, makeStateUpdater, memo, noop, tableMemo } from "./utils.cjs";
62
+ import { API, APIObject, PrototypeAPI, PrototypeAPIObject, assignPrototypeAPIs, assignTableAPIs, callMemoOrStaticFn, cloneState, flattenBy, functionalUpdate, getFunctionNameInfo, isFunction, makeStateUpdater, memo, tableMemo } from "./utils.cjs";
63
63
  import { constructCell } from "./core/cells/constructCell.cjs";
64
64
  import { constructColumn } from "./core/columns/constructColumn.cjs";
65
65
  import { buildHeaderGroups } from "./core/headers/buildHeaderGroups.cjs";
@@ -75,4 +75,4 @@ import { createGroupedRowModel } from "./features/column-grouping/createGroupedR
75
75
  import { createExpandedRowModel, expandRows } from "./features/row-expanding/createExpandedRowModel.cjs";
76
76
  import { createPaginatedRowModel } from "./features/row-pagination/createPaginatedRowModel.cjs";
77
77
  import { createSortedRowModel } from "./features/row-sorting/createSortedRowModel.cjs";
78
- export { $internalMemoFnMeta, API, APIObject, AccessorColumnDef, AccessorFn, AccessorFnColumnDef, AccessorFnColumnDefBase, AccessorKeyColumnDef, AccessorKeyColumnDefBase, AggregationFn, AggregationFnOption, AggregationFns, AssignCellPrototype, AssignColumnPrototype, AssignHeaderPrototype, AssignRowPrototype, Atoms, Atoms_All, BaseAtoms, BaseAtoms_All, BuiltInAggregationFn, BuiltInFilterFn, BuiltInSortFn, CachedRowModel_All, CachedRowModel_Core, CachedRowModel_Expanded, CachedRowModel_Faceted, CachedRowModel_Filtered, CachedRowModel_Grouped, CachedRowModel_Paginated, CachedRowModel_Plugins, CachedRowModel_Sorted, CachedRowModels, CachedRowModels_Plugins, Cell, CellContext, CellData, Cell_Cell, Cell_ColumnGrouping, Cell_Core, Cell_CoreProperties, Cell_Plugins, Column, ColumnDef, ColumnDefBase, ColumnDefBase_All, ColumnDefResolved, ColumnDefTemplate, ColumnDef_ColumnFiltering, ColumnDef_ColumnGrouping, ColumnDef_ColumnPinning, ColumnDef_ColumnResizing, ColumnDef_ColumnSizing, ColumnDef_ColumnVisibility, ColumnDef_GlobalFiltering, ColumnDef_Plugins, ColumnDef_RowSorting, ColumnDefaultOptions, ColumnFacetingFeatureConstructors, ColumnFilter, ColumnFilterAutoRemoveTestFn, ColumnFilteringFeatureConstructors, ColumnFiltersState, ColumnGroupingFeatureConstructors, ColumnHelper, ColumnMeta, ColumnOrderDefaultOptions, ColumnOrderState, ColumnOrderingFeatureConstructors, ColumnPinningDefaultOptions, ColumnPinningFeatureConstructors, ColumnPinningPosition, ColumnPinningState, ColumnResizeDirection, ColumnResizeMode, ColumnResizingDefaultOptions, ColumnResizingFeatureConstructors, ColumnSizingDefaultOptions, ColumnSizingFeatureConstructors, ColumnSizingState, ColumnSort, ColumnVisibilityFeatureConstructors, ColumnVisibilityState, Column_Column, Column_ColumnFaceting, Column_ColumnFiltering, Column_ColumnGrouping, Column_ColumnOrdering, Column_ColumnPinning, Column_ColumnResizing, Column_ColumnSizing, Column_ColumnVisibility, Column_Core, Column_CoreProperties, Column_GlobalFiltering, Column_Internal, Column_Plugins, Column_RowSorting, ConstructTableAPIs, CoreCellsFeatureConstructors, CoreColumnsFeatureConstructors, CoreFeatures, CoreHeadersFeatureConstructors, CoreRowModelsFeatureConstructors, CoreRowsFeatureConstructors, CoreTablesFeatureConstructors, CreateRowModel_Core, CreateRowModel_Expanded, CreateRowModel_Faceted, CreateRowModel_Filtered, CreateRowModel_Grouped, CreateRowModel_Paginated, CreateRowModel_Plugins, CreateRowModel_Sorted, CreateRowModels, CreateRowModels_All, CreateRowModels_Plugins, CustomAggregationFns, CustomFilterFns, CustomSortFns, DebugOptions, DeepKeys, DeepValue, DisplayColumnDef, ExpandedState, ExpandedStateList, ExternalAtoms, ExternalAtoms_All, ExtractFeatureTypes, FeatureConstructors, FilterFn, FilterFnOption, FilterFns, FilterMeta, GetDefaultColumnDef, GetDefaultStateSelector, GetDefaultTableOptions, GetInitialState, Getter, GlobalFilteringFeatureConstructors, GroupColumnDef, GroupingColumnMode, GroupingState, Header, HeaderContext, HeaderGroup, HeaderGroup_Core, HeaderGroup_Header, HeaderGroup_Plugins, Header_ColumnResizing, Header_ColumnSizing, Header_Core, Header_CoreProperties, Header_Header, Header_Plugins, IdIdentifier, IdentifiedColumnDef, InitRowInstanceData, MemoFnMeta, NoInfer, OnChangeFn, PaginationDefaultOptions, PaginationState, PartialKeys, Plugins, Prettify, PrototypeAPI, PrototypeAPIObject, RequiredKeys, ResolvedColumnFilter, Row, RowData, RowExpandingFeatureConstructors, RowModel, RowModelFns, RowModelFns_All, RowModelFns_ColumnFiltering, RowModelFns_ColumnGrouping, RowModelFns_Core, RowModelFns_Plugins, RowModelFns_RowSorting, RowPaginationFeatureConstructors, RowPinningDefaultOptions, RowPinningFeatureConstructors, RowPinningPosition, RowPinningState, RowSelectionFeatureConstructors, RowSelectionState, RowSortingFeatureConstructors, Row_ColumnFiltering, Row_ColumnGrouping, Row_ColumnPinning, Row_ColumnVisibility, Row_Core, Row_CoreProperties, Row_Plugins, Row_Row, Row_RowExpanding, Row_RowPinning, Row_RowSelection, SortDirection, SortFn, SortFnOption, SortFns, SortingState, StockFeatures, StringHeaderIdentifier, StringOrTemplateHeader, Table, TableFeature, TableFeatures, TableMeta, TableOptions, TableOptions_All, TableOptions_Cell, TableOptions_ColumnFiltering, TableOptions_ColumnGrouping, TableOptions_ColumnOrdering, TableOptions_ColumnPinning, TableOptions_ColumnResizing, TableOptions_ColumnSizing, TableOptions_ColumnVisibility, TableOptions_Columns, TableOptions_Core, TableOptions_GlobalFiltering, TableOptions_Plugins, TableOptions_RowExpanding, TableOptions_RowPagination, TableOptions_RowPinning, TableOptions_RowSelection, TableOptions_RowSorting, TableOptions_Rows, TableOptions_Table, TableState, TableState_All, TableState_ColumnFiltering, TableState_ColumnGrouping, TableState_ColumnOrdering, TableState_ColumnPinning, TableState_ColumnResizing, TableState_ColumnSizing, TableState_ColumnVisibility, TableState_GlobalFiltering, TableState_Plugins, TableState_RowExpanding, TableState_RowPagination, TableState_RowPinning, TableState_RowSelection, TableState_RowSorting, Table_ColumnFaceting, Table_ColumnFiltering, Table_ColumnGrouping, Table_ColumnOrdering, Table_ColumnPinning, Table_ColumnResizing, Table_ColumnSizing, Table_ColumnVisibility, Table_Columns, Table_Core, Table_CoreProperties, Table_GlobalFiltering, Table_Headers, Table_Internal, Table_Plugins, Table_RowExpanding, Table_RowModels, Table_RowModels_Core, Table_RowModels_Expanded, Table_RowModels_Faceted, Table_RowModels_Filtered, Table_RowModels_Grouped, Table_RowModels_Paginated, Table_RowModels_Sorted, Table_RowPagination, Table_RowPinning, Table_RowSelection, Table_RowSorting, Table_Rows, Table_Table, TransformFilterValueFn, UnionToIntersection, Updater, VisibilityDefaultOptions, aggregationFn_count, aggregationFn_extent, aggregationFn_max, aggregationFn_mean, aggregationFn_median, aggregationFn_min, aggregationFn_sum, aggregationFn_unique, aggregationFn_uniqueCount, aggregationFns, assignPrototypeAPIs, assignTableAPIs, buildHeaderGroups, callMemoOrStaticFn, cloneState, columnFacetingFeature, columnFilteringFeature, columnGroupingFeature, columnOrderingFeature, columnPinningFeature, columnResizingFeature, columnResizingState, columnSizingFeature, columnVisibilityFeature, constructCell, constructColumn, constructColumnFacetingFeature, constructColumnFilteringFeature, constructColumnGroupingFeature, constructColumnOrderingFeature, constructColumnPinningFeature, constructColumnResizingFeature, constructColumnSizingFeature, constructColumnVisibilityFeature, constructCoreCellsFeature, constructCoreColumnsFeature, constructCoreHeadersFeature, constructCoreRowModelsFeature, constructCoreRowsFeature, constructCoreTablesFeature, constructGlobalFilteringFeature, constructHeader, constructRow, constructRowExpandingFeature, constructRowPaginationFeature, constructRowPinningFeature, constructRowSelectionFeature, constructRowSortingFeature, constructTable, coreCellsFeature, coreColumnsFeature, coreFeatures, coreHeadersFeature, coreRowModelsFeature, coreRowsFeature, coreTablesFeature, createColumnHelper, createCoreRowModel, createExpandedRowModel, createFacetedMinMaxValues, createFacetedRowModel, createFacetedUniqueValues, createFilteredRowModel, createGroupedRowModel, createPaginatedRowModel, createSortedRowModel, expandRows, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_greaterThan, filterFn_greaterThanOrEqualTo, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_lessThan, filterFn_lessThanOrEqualTo, filterFn_weakEquals, filterFns, flattenBy, functionalUpdate, getFunctionNameInfo, getInitialTableState, getMemoFnMeta, globalFilteringFeature, isFunction, isNumberArray, makeStateUpdater, memo, noop, reSplitAlphaNumeric, rowExpandingFeature, rowPaginationFeature, rowPinningFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_alphanumericCaseSensitive, sortFn_basic, sortFn_datetime, sortFn_text, sortFn_textCaseSensitive, sortFns, stockFeatures, tableFeatures, tableMemo, tableOptions };
78
+ export { API, APIObject, AccessorColumnDef, AccessorFn, AccessorFnColumnDef, AccessorFnColumnDefBase, AccessorKeyColumnDef, AccessorKeyColumnDefBase, AggregationFn, AggregationFnOption, AggregationFns, AssignCellPrototype, AssignColumnPrototype, AssignHeaderPrototype, AssignRowPrototype, Atoms, Atoms_All, BaseAtoms, BaseAtoms_All, BuiltInAggregationFn, BuiltInFilterFn, BuiltInSortFn, CachedRowModel_All, CachedRowModel_Core, CachedRowModel_Expanded, CachedRowModel_Faceted, CachedRowModel_Filtered, CachedRowModel_Grouped, CachedRowModel_Paginated, CachedRowModel_Plugins, CachedRowModel_Sorted, CachedRowModels, CachedRowModels_Plugins, Cell, CellContext, CellData, Cell_Cell, Cell_ColumnGrouping, Cell_Core, Cell_CoreProperties, Cell_Plugins, Column, ColumnDef, ColumnDefBase, ColumnDefBase_All, ColumnDefResolved, ColumnDefTemplate, ColumnDef_ColumnFiltering, ColumnDef_ColumnGrouping, ColumnDef_ColumnPinning, ColumnDef_ColumnResizing, ColumnDef_ColumnSizing, ColumnDef_ColumnVisibility, ColumnDef_GlobalFiltering, ColumnDef_Plugins, ColumnDef_RowSorting, ColumnDefaultOptions, ColumnFacetingFeatureConstructors, ColumnFilter, ColumnFilterAutoRemoveTestFn, ColumnFilteringFeatureConstructors, ColumnFiltersState, ColumnGroupingFeatureConstructors, ColumnHelper, ColumnMeta, ColumnOrderDefaultOptions, ColumnOrderState, ColumnOrderingFeatureConstructors, ColumnPinningDefaultOptions, ColumnPinningFeatureConstructors, ColumnPinningPosition, ColumnPinningState, ColumnResizeDirection, ColumnResizeMode, ColumnResizingDefaultOptions, ColumnResizingFeatureConstructors, ColumnSizingDefaultOptions, ColumnSizingFeatureConstructors, ColumnSizingState, ColumnSort, ColumnVisibilityFeatureConstructors, ColumnVisibilityState, Column_Column, Column_ColumnFaceting, Column_ColumnFiltering, Column_ColumnGrouping, Column_ColumnOrdering, Column_ColumnPinning, Column_ColumnResizing, Column_ColumnSizing, Column_ColumnVisibility, Column_Core, Column_CoreProperties, Column_GlobalFiltering, Column_Internal, Column_Plugins, Column_RowSorting, ConstructTableAPIs, CoreCellsFeatureConstructors, CoreColumnsFeatureConstructors, CoreFeatures, CoreHeadersFeatureConstructors, CoreRowModelsFeatureConstructors, CoreRowsFeatureConstructors, CoreTablesFeatureConstructors, CreateRowModel_Core, CreateRowModel_Expanded, CreateRowModel_Faceted, CreateRowModel_Filtered, CreateRowModel_Grouped, CreateRowModel_Paginated, CreateRowModel_Plugins, CreateRowModel_Sorted, CreateRowModels, CreateRowModels_All, CreateRowModels_Plugins, CustomAggregationFns, CustomFilterFns, CustomSortFns, DebugOptions, DeepKeys, DeepValue, DisplayColumnDef, ExpandedState, ExpandedStateList, ExternalAtoms, ExternalAtoms_All, ExtractFeatureTypes, FeatureConstructors, FilterFn, FilterFnOption, FilterFns, FilterMeta, GetDefaultColumnDef, GetDefaultStateSelector, GetDefaultTableOptions, GetInitialState, Getter, GlobalFilteringFeatureConstructors, GroupColumnDef, GroupingColumnMode, GroupingState, Header, HeaderContext, HeaderGroup, HeaderGroup_Core, HeaderGroup_Header, HeaderGroup_Plugins, Header_ColumnResizing, Header_ColumnSizing, Header_Core, Header_CoreProperties, Header_Header, Header_Plugins, IdIdentifier, IdentifiedColumnDef, InitRowInstanceData, NoInfer, OnChangeFn, PaginationDefaultOptions, PaginationState, PartialKeys, Plugins, Prettify, PrototypeAPI, PrototypeAPIObject, RequiredKeys, ResolvedColumnFilter, Row, RowData, RowExpandingFeatureConstructors, RowModel, RowModelFns, RowModelFns_All, RowModelFns_ColumnFiltering, RowModelFns_ColumnGrouping, RowModelFns_Core, RowModelFns_Plugins, RowModelFns_RowSorting, RowPaginationFeatureConstructors, RowPinningDefaultOptions, RowPinningFeatureConstructors, RowPinningPosition, RowPinningState, RowSelectionFeatureConstructors, RowSelectionState, RowSortingFeatureConstructors, Row_ColumnFiltering, Row_ColumnGrouping, Row_ColumnPinning, Row_ColumnVisibility, Row_Core, Row_CoreProperties, Row_Plugins, Row_Row, Row_RowExpanding, Row_RowPinning, Row_RowSelection, SortDirection, SortFn, SortFnOption, SortFns, SortingState, StockFeatures, StringHeaderIdentifier, StringOrTemplateHeader, Table, TableFeature, TableFeatures, TableMeta, TableOptions, TableOptions_All, TableOptions_Cell, TableOptions_ColumnFiltering, TableOptions_ColumnGrouping, TableOptions_ColumnOrdering, TableOptions_ColumnPinning, TableOptions_ColumnResizing, TableOptions_ColumnSizing, TableOptions_ColumnVisibility, TableOptions_Columns, TableOptions_Core, TableOptions_GlobalFiltering, TableOptions_Plugins, TableOptions_RowExpanding, TableOptions_RowPagination, TableOptions_RowPinning, TableOptions_RowSelection, TableOptions_RowSorting, TableOptions_Rows, TableOptions_Table, TableState, TableState_All, TableState_ColumnFiltering, TableState_ColumnGrouping, TableState_ColumnOrdering, TableState_ColumnPinning, TableState_ColumnResizing, TableState_ColumnSizing, TableState_ColumnVisibility, TableState_GlobalFiltering, TableState_Plugins, TableState_RowExpanding, TableState_RowPagination, TableState_RowPinning, TableState_RowSelection, TableState_RowSorting, Table_ColumnFaceting, Table_ColumnFiltering, Table_ColumnGrouping, Table_ColumnOrdering, Table_ColumnPinning, Table_ColumnResizing, Table_ColumnSizing, Table_ColumnVisibility, Table_Columns, Table_Core, Table_CoreProperties, Table_GlobalFiltering, Table_Headers, Table_Internal, Table_Plugins, Table_RowExpanding, Table_RowModels, Table_RowModels_Core, Table_RowModels_Expanded, Table_RowModels_Faceted, Table_RowModels_Filtered, Table_RowModels_Grouped, Table_RowModels_Paginated, Table_RowModels_Sorted, Table_RowPagination, Table_RowPinning, Table_RowSelection, Table_RowSorting, Table_Rows, Table_Table, TransformFilterValueFn, UnionToIntersection, Updater, VisibilityDefaultOptions, aggregationFn_count, aggregationFn_extent, aggregationFn_max, aggregationFn_mean, aggregationFn_median, aggregationFn_min, aggregationFn_sum, aggregationFn_unique, aggregationFn_uniqueCount, aggregationFns, assignPrototypeAPIs, assignTableAPIs, buildHeaderGroups, callMemoOrStaticFn, cloneState, columnFacetingFeature, columnFilteringFeature, columnGroupingFeature, columnOrderingFeature, columnPinningFeature, columnResizingFeature, columnResizingState, columnSizingFeature, columnVisibilityFeature, constructCell, constructColumn, constructColumnFacetingFeature, constructColumnFilteringFeature, constructColumnGroupingFeature, constructColumnOrderingFeature, constructColumnPinningFeature, constructColumnResizingFeature, constructColumnSizingFeature, constructColumnVisibilityFeature, constructCoreCellsFeature, constructCoreColumnsFeature, constructCoreHeadersFeature, constructCoreRowModelsFeature, constructCoreRowsFeature, constructCoreTablesFeature, constructGlobalFilteringFeature, constructHeader, constructRow, constructRowExpandingFeature, constructRowPaginationFeature, constructRowPinningFeature, constructRowSelectionFeature, constructRowSortingFeature, constructTable, coreCellsFeature, coreColumnsFeature, coreFeatures, coreHeadersFeature, coreRowModelsFeature, coreRowsFeature, coreTablesFeature, createColumnHelper, createCoreRowModel, createExpandedRowModel, createFacetedMinMaxValues, createFacetedRowModel, createFacetedUniqueValues, createFilteredRowModel, createGroupedRowModel, createPaginatedRowModel, createSortedRowModel, expandRows, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_greaterThan, filterFn_greaterThanOrEqualTo, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_lessThan, filterFn_lessThanOrEqualTo, filterFn_weakEquals, filterFns, flattenBy, functionalUpdate, getFunctionNameInfo, getInitialTableState, globalFilteringFeature, isFunction, makeStateUpdater, memo, reSplitAlphaNumeric, rowExpandingFeature, rowPaginationFeature, rowPinningFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_alphanumericCaseSensitive, sortFn_basic, sortFn_datetime, sortFn_text, sortFn_textCaseSensitive, sortFns, stockFeatures, tableFeatures, tableMemo, tableOptions };