@tanstack/table-core 9.0.0-alpha.42 → 9.0.0-alpha.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/cells/constructCell.cjs +5 -0
- package/dist/core/cells/constructCell.cjs.map +1 -1
- package/dist/core/cells/constructCell.d.cts +5 -0
- package/dist/core/cells/constructCell.d.ts +5 -0
- package/dist/core/cells/constructCell.js +5 -0
- package/dist/core/cells/constructCell.js.map +1 -1
- package/dist/core/cells/coreCellsFeature.cjs +5 -0
- package/dist/core/cells/coreCellsFeature.cjs.map +1 -1
- package/dist/core/cells/coreCellsFeature.d.cts +5 -0
- package/dist/core/cells/coreCellsFeature.d.ts +5 -0
- package/dist/core/cells/coreCellsFeature.js +5 -0
- package/dist/core/cells/coreCellsFeature.js.map +1 -1
- package/dist/core/cells/coreCellsFeature.utils.cjs +30 -0
- package/dist/core/cells/coreCellsFeature.utils.cjs.map +1 -1
- package/dist/core/cells/coreCellsFeature.utils.d.cts +30 -0
- package/dist/core/cells/coreCellsFeature.utils.d.ts +30 -0
- package/dist/core/cells/coreCellsFeature.utils.js +30 -0
- package/dist/core/cells/coreCellsFeature.utils.js.map +1 -1
- package/dist/core/columns/constructColumn.cjs +16 -9
- package/dist/core/columns/constructColumn.cjs.map +1 -1
- package/dist/core/columns/constructColumn.d.cts +5 -0
- package/dist/core/columns/constructColumn.d.ts +5 -0
- package/dist/core/columns/constructColumn.js +16 -9
- package/dist/core/columns/constructColumn.js.map +1 -1
- package/dist/core/columns/coreColumnsFeature.cjs +9 -0
- package/dist/core/columns/coreColumnsFeature.cjs.map +1 -1
- package/dist/core/columns/coreColumnsFeature.d.cts +5 -0
- package/dist/core/columns/coreColumnsFeature.d.ts +5 -0
- package/dist/core/columns/coreColumnsFeature.js +10 -1
- package/dist/core/columns/coreColumnsFeature.js.map +1 -1
- package/dist/core/columns/coreColumnsFeature.types.d.cts +4 -0
- package/dist/core/columns/coreColumnsFeature.types.d.ts +4 -0
- package/dist/core/columns/coreColumnsFeature.utils.cjs +99 -4
- package/dist/core/columns/coreColumnsFeature.utils.cjs.map +1 -1
- package/dist/core/columns/coreColumnsFeature.utils.d.cts +92 -1
- package/dist/core/columns/coreColumnsFeature.utils.d.ts +92 -1
- package/dist/core/columns/coreColumnsFeature.utils.js +99 -5
- package/dist/core/columns/coreColumnsFeature.utils.js.map +1 -1
- package/dist/core/coreFeatures.cjs +5 -0
- package/dist/core/coreFeatures.cjs.map +1 -1
- package/dist/core/coreFeatures.d.cts +5 -0
- package/dist/core/coreFeatures.d.ts +5 -0
- package/dist/core/coreFeatures.js +5 -0
- package/dist/core/coreFeatures.js.map +1 -1
- package/dist/core/headers/buildHeaderGroups.cjs +6 -1
- package/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
- package/dist/core/headers/buildHeaderGroups.d.cts +5 -0
- package/dist/core/headers/buildHeaderGroups.d.ts +5 -0
- package/dist/core/headers/buildHeaderGroups.js +6 -1
- package/dist/core/headers/buildHeaderGroups.js.map +1 -1
- package/dist/core/headers/constructHeader.cjs +5 -0
- package/dist/core/headers/constructHeader.cjs.map +1 -1
- package/dist/core/headers/constructHeader.d.cts +5 -0
- package/dist/core/headers/constructHeader.d.ts +5 -0
- package/dist/core/headers/constructHeader.js +5 -0
- package/dist/core/headers/constructHeader.js.map +1 -1
- package/dist/core/headers/coreHeadersFeature.cjs +5 -0
- package/dist/core/headers/coreHeadersFeature.cjs.map +1 -1
- package/dist/core/headers/coreHeadersFeature.d.cts +5 -0
- package/dist/core/headers/coreHeadersFeature.d.ts +5 -0
- package/dist/core/headers/coreHeadersFeature.js +5 -0
- package/dist/core/headers/coreHeadersFeature.js.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.cjs +71 -2
- package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.d.cts +60 -0
- package/dist/core/headers/coreHeadersFeature.utils.d.ts +60 -0
- package/dist/core/headers/coreHeadersFeature.utils.js +72 -3
- package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
- package/dist/core/reactivity/coreReactivityFeature.types.d.cts +1 -0
- package/dist/core/reactivity/coreReactivityFeature.types.d.ts +1 -0
- package/dist/core/reactivity/coreReactivityFeature.utils.cjs +5 -0
- package/dist/core/reactivity/coreReactivityFeature.utils.cjs.map +1 -1
- package/dist/core/reactivity/coreReactivityFeature.utils.d.cts +10 -0
- package/dist/core/reactivity/coreReactivityFeature.utils.d.ts +10 -0
- package/dist/core/reactivity/coreReactivityFeature.utils.js +5 -0
- package/dist/core/reactivity/coreReactivityFeature.utils.js.map +1 -1
- package/dist/core/row-models/coreRowModelsFeature.cjs +5 -0
- package/dist/core/row-models/coreRowModelsFeature.cjs.map +1 -1
- package/dist/core/row-models/coreRowModelsFeature.d.cts +5 -0
- package/dist/core/row-models/coreRowModelsFeature.d.ts +5 -0
- package/dist/core/row-models/coreRowModelsFeature.js +5 -0
- package/dist/core/row-models/coreRowModelsFeature.js.map +1 -1
- package/dist/core/row-models/coreRowModelsFeature.types.d.cts +2 -1
- package/dist/core/row-models/coreRowModelsFeature.types.d.ts +2 -1
- package/dist/core/row-models/coreRowModelsFeature.utils.cjs +120 -0
- package/dist/core/row-models/coreRowModelsFeature.utils.cjs.map +1 -1
- package/dist/core/row-models/coreRowModelsFeature.utils.d.cts +120 -0
- package/dist/core/row-models/coreRowModelsFeature.utils.d.ts +120 -0
- package/dist/core/row-models/coreRowModelsFeature.utils.js +120 -0
- package/dist/core/row-models/coreRowModelsFeature.utils.js.map +1 -1
- package/dist/core/row-models/createCoreRowModel.cjs +5 -0
- package/dist/core/row-models/createCoreRowModel.cjs.map +1 -1
- package/dist/core/row-models/createCoreRowModel.d.cts +5 -0
- package/dist/core/row-models/createCoreRowModel.d.ts +5 -0
- package/dist/core/row-models/createCoreRowModel.js +5 -0
- package/dist/core/row-models/createCoreRowModel.js.map +1 -1
- package/dist/core/rows/constructRow.cjs +5 -0
- package/dist/core/rows/constructRow.cjs.map +1 -1
- package/dist/core/rows/constructRow.d.cts +5 -0
- package/dist/core/rows/constructRow.d.ts +5 -0
- package/dist/core/rows/constructRow.js +5 -0
- package/dist/core/rows/constructRow.js.map +1 -1
- package/dist/core/rows/coreRowsFeature.cjs +5 -0
- package/dist/core/rows/coreRowsFeature.cjs.map +1 -1
- package/dist/core/rows/coreRowsFeature.d.cts +5 -0
- package/dist/core/rows/coreRowsFeature.d.ts +5 -0
- package/dist/core/rows/coreRowsFeature.js +5 -0
- package/dist/core/rows/coreRowsFeature.js.map +1 -1
- package/dist/core/rows/coreRowsFeature.types.d.cts +3 -0
- package/dist/core/rows/coreRowsFeature.types.d.ts +3 -0
- package/dist/core/rows/coreRowsFeature.utils.cjs +104 -4
- package/dist/core/rows/coreRowsFeature.utils.cjs.map +1 -1
- package/dist/core/rows/coreRowsFeature.utils.d.cts +101 -0
- package/dist/core/rows/coreRowsFeature.utils.d.ts +101 -0
- package/dist/core/rows/coreRowsFeature.utils.js +104 -4
- package/dist/core/rows/coreRowsFeature.utils.js.map +1 -1
- package/dist/core/table/constructTable.cjs +34 -19
- package/dist/core/table/constructTable.cjs.map +1 -1
- package/dist/core/table/constructTable.d.cts +10 -0
- package/dist/core/table/constructTable.d.ts +10 -0
- package/dist/core/table/constructTable.js +34 -19
- package/dist/core/table/constructTable.js.map +1 -1
- package/dist/core/table/coreTablesFeature.cjs +5 -0
- package/dist/core/table/coreTablesFeature.cjs.map +1 -1
- package/dist/core/table/coreTablesFeature.d.cts +5 -0
- package/dist/core/table/coreTablesFeature.d.ts +5 -0
- package/dist/core/table/coreTablesFeature.js +5 -0
- package/dist/core/table/coreTablesFeature.js.map +1 -1
- package/dist/core/table/coreTablesFeature.types.d.cts +23 -10
- package/dist/core/table/coreTablesFeature.types.d.ts +23 -10
- package/dist/core/table/coreTablesFeature.utils.cjs +60 -1
- package/dist/core/table/coreTablesFeature.utils.cjs.map +1 -1
- package/dist/core/table/coreTablesFeature.utils.d.cts +46 -1
- package/dist/core/table/coreTablesFeature.utils.d.ts +46 -1
- package/dist/core/table/coreTablesFeature.utils.js +60 -2
- package/dist/core/table/coreTablesFeature.utils.js.map +1 -1
- package/dist/features/column-faceting/columnFacetingFeature.cjs +9 -1
- package/dist/features/column-faceting/columnFacetingFeature.cjs.map +1 -1
- package/dist/features/column-faceting/columnFacetingFeature.d.cts +9 -1
- package/dist/features/column-faceting/columnFacetingFeature.d.ts +9 -1
- package/dist/features/column-faceting/columnFacetingFeature.js +9 -1
- package/dist/features/column-faceting/columnFacetingFeature.js.map +1 -1
- package/dist/features/column-faceting/columnFacetingFeature.types.d.cts +12 -6
- package/dist/features/column-faceting/columnFacetingFeature.types.d.ts +12 -6
- package/dist/features/column-faceting/columnFacetingFeature.utils.cjs +60 -0
- package/dist/features/column-faceting/columnFacetingFeature.utils.cjs.map +1 -1
- package/dist/features/column-faceting/columnFacetingFeature.utils.d.cts +60 -0
- package/dist/features/column-faceting/columnFacetingFeature.utils.d.ts +60 -0
- package/dist/features/column-faceting/columnFacetingFeature.utils.js +60 -0
- package/dist/features/column-faceting/columnFacetingFeature.utils.js.map +1 -1
- package/dist/features/column-faceting/createFacetedMinMaxValues.cjs +5 -0
- package/dist/features/column-faceting/createFacetedMinMaxValues.cjs.map +1 -1
- package/dist/features/column-faceting/createFacetedMinMaxValues.d.cts +5 -0
- package/dist/features/column-faceting/createFacetedMinMaxValues.d.ts +5 -0
- package/dist/features/column-faceting/createFacetedMinMaxValues.js +5 -0
- package/dist/features/column-faceting/createFacetedMinMaxValues.js.map +1 -1
- package/dist/features/column-faceting/createFacetedRowModel.cjs +5 -0
- package/dist/features/column-faceting/createFacetedRowModel.cjs.map +1 -1
- package/dist/features/column-faceting/createFacetedRowModel.d.cts +5 -0
- package/dist/features/column-faceting/createFacetedRowModel.d.ts +5 -0
- package/dist/features/column-faceting/createFacetedRowModel.js +5 -0
- package/dist/features/column-faceting/createFacetedRowModel.js.map +1 -1
- package/dist/features/column-faceting/createFacetedUniqueValues.cjs +5 -0
- package/dist/features/column-faceting/createFacetedUniqueValues.cjs.map +1 -1
- package/dist/features/column-faceting/createFacetedUniqueValues.d.cts +5 -0
- package/dist/features/column-faceting/createFacetedUniqueValues.d.ts +5 -0
- package/dist/features/column-faceting/createFacetedUniqueValues.js +5 -0
- package/dist/features/column-faceting/createFacetedUniqueValues.js.map +1 -1
- package/dist/features/column-filtering/columnFilteringFeature.cjs +10 -2
- package/dist/features/column-filtering/columnFilteringFeature.cjs.map +1 -1
- package/dist/features/column-filtering/columnFilteringFeature.d.cts +10 -2
- package/dist/features/column-filtering/columnFilteringFeature.d.ts +10 -2
- package/dist/features/column-filtering/columnFilteringFeature.js +10 -2
- package/dist/features/column-filtering/columnFilteringFeature.js.map +1 -1
- package/dist/features/column-filtering/columnFilteringFeature.types.d.cts +7 -4
- package/dist/features/column-filtering/columnFilteringFeature.types.d.ts +7 -4
- package/dist/features/column-filtering/columnFilteringFeature.utils.cjs +113 -2
- package/dist/features/column-filtering/columnFilteringFeature.utils.cjs.map +1 -1
- package/dist/features/column-filtering/columnFilteringFeature.utils.d.cts +111 -0
- package/dist/features/column-filtering/columnFilteringFeature.utils.d.ts +111 -0
- package/dist/features/column-filtering/columnFilteringFeature.utils.js +113 -2
- package/dist/features/column-filtering/columnFilteringFeature.utils.js.map +1 -1
- package/dist/features/column-filtering/createFilteredRowModel.cjs +5 -0
- package/dist/features/column-filtering/createFilteredRowModel.cjs.map +1 -1
- package/dist/features/column-filtering/createFilteredRowModel.d.cts +5 -0
- package/dist/features/column-filtering/createFilteredRowModel.d.ts +5 -0
- package/dist/features/column-filtering/createFilteredRowModel.js +5 -0
- package/dist/features/column-filtering/createFilteredRowModel.js.map +1 -1
- package/dist/features/column-filtering/filterRowsUtils.cjs +5 -0
- package/dist/features/column-filtering/filterRowsUtils.cjs.map +1 -1
- package/dist/features/column-filtering/filterRowsUtils.js +5 -0
- package/dist/features/column-filtering/filterRowsUtils.js.map +1 -1
- package/dist/features/column-grouping/columnGroupingFeature.cjs +9 -1
- package/dist/features/column-grouping/columnGroupingFeature.cjs.map +1 -1
- package/dist/features/column-grouping/columnGroupingFeature.d.cts +9 -1
- package/dist/features/column-grouping/columnGroupingFeature.d.ts +9 -1
- package/dist/features/column-grouping/columnGroupingFeature.js +9 -1
- package/dist/features/column-grouping/columnGroupingFeature.js.map +1 -1
- package/dist/features/column-grouping/columnGroupingFeature.types.d.cts +7 -3
- package/dist/features/column-grouping/columnGroupingFeature.types.d.ts +7 -3
- package/dist/features/column-grouping/columnGroupingFeature.utils.cjs +151 -0
- package/dist/features/column-grouping/columnGroupingFeature.utils.cjs.map +1 -1
- package/dist/features/column-grouping/columnGroupingFeature.utils.d.cts +151 -0
- package/dist/features/column-grouping/columnGroupingFeature.utils.d.ts +151 -0
- package/dist/features/column-grouping/columnGroupingFeature.utils.js +151 -0
- package/dist/features/column-grouping/columnGroupingFeature.utils.js.map +1 -1
- package/dist/features/column-grouping/createGroupedRowModel.cjs +5 -0
- package/dist/features/column-grouping/createGroupedRowModel.cjs.map +1 -1
- package/dist/features/column-grouping/createGroupedRowModel.d.cts +5 -0
- package/dist/features/column-grouping/createGroupedRowModel.d.ts +5 -0
- package/dist/features/column-grouping/createGroupedRowModel.js +5 -0
- package/dist/features/column-grouping/createGroupedRowModel.js.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.cjs +12 -3
- package/dist/features/column-ordering/columnOrderingFeature.cjs.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.d.cts +9 -1
- package/dist/features/column-ordering/columnOrderingFeature.d.ts +9 -1
- package/dist/features/column-ordering/columnOrderingFeature.js +12 -3
- package/dist/features/column-ordering/columnOrderingFeature.js.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +4 -2
- package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +4 -2
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +98 -8
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +81 -0
- package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +81 -0
- package/dist/features/column-ordering/columnOrderingFeature.utils.js +98 -8
- package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.cjs +17 -30
- package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.d.cts +9 -1
- package/dist/features/column-pinning/columnPinningFeature.d.ts +9 -1
- package/dist/features/column-pinning/columnPinningFeature.js +17 -30
- package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.types.d.cts +6 -2
- package/dist/features/column-pinning/columnPinningFeature.types.d.ts +6 -2
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs +360 -17
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +314 -3
- package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +314 -3
- package/dist/features/column-pinning/columnPinningFeature.utils.js +361 -18
- package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
- package/dist/features/column-resizing/columnResizingFeature.cjs +9 -2
- package/dist/features/column-resizing/columnResizingFeature.cjs.map +1 -1
- package/dist/features/column-resizing/columnResizingFeature.d.cts +9 -2
- package/dist/features/column-resizing/columnResizingFeature.d.ts +9 -2
- package/dist/features/column-resizing/columnResizingFeature.js +9 -2
- package/dist/features/column-resizing/columnResizingFeature.js.map +1 -1
- package/dist/features/column-resizing/columnResizingFeature.types.d.cts +14 -6
- package/dist/features/column-resizing/columnResizingFeature.types.d.ts +14 -6
- package/dist/features/column-resizing/columnResizingFeature.utils.cjs +81 -0
- package/dist/features/column-resizing/columnResizingFeature.utils.cjs.map +1 -1
- package/dist/features/column-resizing/columnResizingFeature.utils.d.cts +81 -0
- package/dist/features/column-resizing/columnResizingFeature.utils.d.ts +81 -0
- package/dist/features/column-resizing/columnResizingFeature.utils.js +81 -0
- package/dist/features/column-resizing/columnResizingFeature.utils.js.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.cjs +50 -12
- package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.d.cts +10 -2
- package/dist/features/column-sizing/columnSizingFeature.d.ts +10 -2
- package/dist/features/column-sizing/columnSizingFeature.js +51 -13
- package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.types.d.cts +6 -3
- package/dist/features/column-sizing/columnSizingFeature.types.d.ts +6 -3
- package/dist/features/column-sizing/columnSizingFeature.utils.cjs +151 -3
- package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +141 -0
- package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +141 -0
- package/dist/features/column-sizing/columnSizingFeature.utils.js +151 -3
- package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.cjs +26 -25
- package/dist/features/column-visibility/columnVisibilityFeature.cjs.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.d.cts +9 -1
- package/dist/features/column-visibility/columnVisibilityFeature.d.ts +9 -1
- package/dist/features/column-visibility/columnVisibilityFeature.js +27 -26
- package/dist/features/column-visibility/columnVisibilityFeature.js.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.types.d.cts +4 -3
- package/dist/features/column-visibility/columnVisibilityFeature.types.d.ts +4 -3
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +172 -12
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +143 -3
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +143 -3
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js +173 -12
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
- package/dist/features/global-filtering/globalFilteringFeature.cjs +9 -2
- package/dist/features/global-filtering/globalFilteringFeature.cjs.map +1 -1
- package/dist/features/global-filtering/globalFilteringFeature.d.cts +9 -2
- package/dist/features/global-filtering/globalFilteringFeature.d.ts +9 -2
- package/dist/features/global-filtering/globalFilteringFeature.js +9 -2
- package/dist/features/global-filtering/globalFilteringFeature.js.map +1 -1
- package/dist/features/global-filtering/globalFilteringFeature.types.d.cts +4 -2
- package/dist/features/global-filtering/globalFilteringFeature.types.d.ts +4 -2
- package/dist/features/global-filtering/globalFilteringFeature.utils.cjs +51 -0
- package/dist/features/global-filtering/globalFilteringFeature.utils.cjs.map +1 -1
- package/dist/features/global-filtering/globalFilteringFeature.utils.d.cts +51 -0
- package/dist/features/global-filtering/globalFilteringFeature.utils.d.ts +51 -0
- package/dist/features/global-filtering/globalFilteringFeature.utils.js +51 -0
- package/dist/features/global-filtering/globalFilteringFeature.utils.js.map +1 -1
- package/dist/features/row-expanding/createExpandedRowModel.cjs +10 -0
- package/dist/features/row-expanding/createExpandedRowModel.cjs.map +1 -1
- package/dist/features/row-expanding/createExpandedRowModel.d.cts +10 -0
- package/dist/features/row-expanding/createExpandedRowModel.d.ts +10 -0
- package/dist/features/row-expanding/createExpandedRowModel.js +10 -0
- package/dist/features/row-expanding/createExpandedRowModel.js.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.cjs +9 -1
- package/dist/features/row-expanding/rowExpandingFeature.cjs.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.d.cts +9 -1
- package/dist/features/row-expanding/rowExpandingFeature.d.ts +9 -1
- package/dist/features/row-expanding/rowExpandingFeature.js +9 -1
- package/dist/features/row-expanding/rowExpandingFeature.js.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.types.d.cts +10 -5
- package/dist/features/row-expanding/rowExpandingFeature.types.d.ts +10 -5
- package/dist/features/row-expanding/rowExpandingFeature.utils.cjs +151 -0
- package/dist/features/row-expanding/rowExpandingFeature.utils.cjs.map +1 -1
- package/dist/features/row-expanding/rowExpandingFeature.utils.d.cts +151 -0
- package/dist/features/row-expanding/rowExpandingFeature.utils.d.ts +151 -0
- package/dist/features/row-expanding/rowExpandingFeature.utils.js +151 -0
- package/dist/features/row-expanding/rowExpandingFeature.utils.js.map +1 -1
- package/dist/features/row-pagination/createPaginatedRowModel.cjs +5 -0
- package/dist/features/row-pagination/createPaginatedRowModel.cjs.map +1 -1
- package/dist/features/row-pagination/createPaginatedRowModel.d.cts +5 -0
- package/dist/features/row-pagination/createPaginatedRowModel.d.ts +5 -0
- package/dist/features/row-pagination/createPaginatedRowModel.js +5 -0
- package/dist/features/row-pagination/createPaginatedRowModel.js.map +1 -1
- package/dist/features/row-pagination/rowPaginationFeature.cjs +9 -1
- package/dist/features/row-pagination/rowPaginationFeature.cjs.map +1 -1
- package/dist/features/row-pagination/rowPaginationFeature.d.cts +9 -1
- package/dist/features/row-pagination/rowPaginationFeature.d.ts +9 -1
- package/dist/features/row-pagination/rowPaginationFeature.js +9 -1
- package/dist/features/row-pagination/rowPaginationFeature.js.map +1 -1
- package/dist/features/row-pagination/rowPaginationFeature.types.d.cts +11 -7
- package/dist/features/row-pagination/rowPaginationFeature.types.d.ts +11 -7
- package/dist/features/row-pagination/rowPaginationFeature.utils.cjs +175 -0
- package/dist/features/row-pagination/rowPaginationFeature.utils.cjs.map +1 -1
- package/dist/features/row-pagination/rowPaginationFeature.utils.d.cts +175 -0
- package/dist/features/row-pagination/rowPaginationFeature.utils.d.ts +175 -0
- package/dist/features/row-pagination/rowPaginationFeature.utils.js +175 -0
- package/dist/features/row-pagination/rowPaginationFeature.utils.js.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.cjs +9 -1
- package/dist/features/row-pinning/rowPinningFeature.cjs.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.d.cts +9 -1
- package/dist/features/row-pinning/rowPinningFeature.d.ts +9 -1
- package/dist/features/row-pinning/rowPinningFeature.js +9 -1
- package/dist/features/row-pinning/rowPinningFeature.js.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.types.d.cts +4 -2
- package/dist/features/row-pinning/rowPinningFeature.types.d.ts +4 -2
- package/dist/features/row-pinning/rowPinningFeature.utils.cjs +112 -0
- package/dist/features/row-pinning/rowPinningFeature.utils.cjs.map +1 -1
- package/dist/features/row-pinning/rowPinningFeature.utils.d.cts +112 -0
- package/dist/features/row-pinning/rowPinningFeature.utils.d.ts +112 -0
- package/dist/features/row-pinning/rowPinningFeature.utils.js +112 -0
- package/dist/features/row-pinning/rowPinningFeature.utils.js.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.cjs +9 -1
- package/dist/features/row-selection/rowSelectionFeature.cjs.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.d.cts +9 -1
- package/dist/features/row-selection/rowSelectionFeature.d.ts +9 -1
- package/dist/features/row-selection/rowSelectionFeature.js +9 -1
- package/dist/features/row-selection/rowSelectionFeature.js.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.types.d.cts +4 -2
- package/dist/features/row-selection/rowSelectionFeature.types.d.ts +4 -2
- package/dist/features/row-selection/rowSelectionFeature.utils.cjs +259 -0
- package/dist/features/row-selection/rowSelectionFeature.utils.cjs.map +1 -1
- package/dist/features/row-selection/rowSelectionFeature.utils.d.cts +259 -0
- package/dist/features/row-selection/rowSelectionFeature.utils.d.ts +259 -0
- package/dist/features/row-selection/rowSelectionFeature.utils.js +259 -0
- package/dist/features/row-selection/rowSelectionFeature.utils.js.map +1 -1
- package/dist/features/row-sorting/createSortedRowModel.cjs +5 -0
- package/dist/features/row-sorting/createSortedRowModel.cjs.map +1 -1
- package/dist/features/row-sorting/createSortedRowModel.d.cts +5 -0
- package/dist/features/row-sorting/createSortedRowModel.d.ts +5 -0
- package/dist/features/row-sorting/createSortedRowModel.js +5 -0
- package/dist/features/row-sorting/createSortedRowModel.js.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.cjs +11 -3
- package/dist/features/row-sorting/rowSortingFeature.cjs.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.d.cts +9 -1
- package/dist/features/row-sorting/rowSortingFeature.d.ts +9 -1
- package/dist/features/row-sorting/rowSortingFeature.js +11 -3
- package/dist/features/row-sorting/rowSortingFeature.js.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.types.d.cts +7 -3
- package/dist/features/row-sorting/rowSortingFeature.types.d.ts +7 -3
- package/dist/features/row-sorting/rowSortingFeature.utils.cjs +151 -0
- package/dist/features/row-sorting/rowSortingFeature.utils.cjs.map +1 -1
- package/dist/features/row-sorting/rowSortingFeature.utils.d.cts +151 -0
- package/dist/features/row-sorting/rowSortingFeature.utils.d.ts +151 -0
- package/dist/features/row-sorting/rowSortingFeature.utils.js +151 -0
- package/dist/features/row-sorting/rowSortingFeature.utils.js.map +1 -1
- package/dist/features/stockFeatures.cjs +5 -0
- package/dist/features/stockFeatures.cjs.map +1 -1
- package/dist/features/stockFeatures.d.cts +5 -0
- package/dist/features/stockFeatures.d.ts +5 -0
- package/dist/features/stockFeatures.js +5 -0
- package/dist/features/stockFeatures.js.map +1 -1
- package/dist/flex-render.cjs +10 -0
- package/dist/flex-render.cjs.map +1 -1
- package/dist/flex-render.d.cts +10 -0
- package/dist/flex-render.d.ts +10 -0
- package/dist/flex-render.js +10 -0
- package/dist/flex-render.js.map +1 -1
- package/dist/fns/aggregationFns.cjs +5 -0
- package/dist/fns/aggregationFns.cjs.map +1 -1
- package/dist/fns/aggregationFns.d.cts +5 -0
- package/dist/fns/aggregationFns.d.ts +5 -0
- package/dist/fns/aggregationFns.js +5 -0
- package/dist/fns/aggregationFns.js.map +1 -1
- package/dist/fns/filterFns.cjs +5 -0
- package/dist/fns/filterFns.cjs.map +1 -1
- package/dist/fns/filterFns.d.cts +5 -0
- package/dist/fns/filterFns.d.ts +5 -0
- package/dist/fns/filterFns.js +5 -0
- package/dist/fns/filterFns.js.map +1 -1
- package/dist/fns/sortFns.cjs +49 -4
- package/dist/fns/sortFns.cjs.map +1 -1
- package/dist/fns/sortFns.d.cts +41 -0
- package/dist/fns/sortFns.d.ts +41 -0
- package/dist/fns/sortFns.js +49 -4
- package/dist/fns/sortFns.js.map +1 -1
- package/dist/helpers/columnHelper.cjs.map +1 -1
- package/dist/helpers/columnHelper.js.map +1 -1
- package/dist/helpers/tableFeatures.cjs.map +1 -1
- package/dist/helpers/tableFeatures.js.map +1 -1
- package/dist/helpers/tableOptions.cjs +6 -0
- package/dist/helpers/tableOptions.cjs.map +1 -1
- package/dist/helpers/tableOptions.d.cts +26 -0
- package/dist/helpers/tableOptions.d.ts +26 -0
- package/dist/helpers/tableOptions.js +6 -0
- package/dist/helpers/tableOptions.js.map +1 -1
- package/dist/reactivity.cjs +1 -3
- package/dist/reactivity.d.cts +1 -2
- package/dist/reactivity.d.ts +1 -2
- package/dist/reactivity.js +1 -2
- package/dist/static-functions.cjs +2 -1
- package/dist/static-functions.d.cts +4 -4
- package/dist/static-functions.d.ts +4 -4
- package/dist/static-functions.js +4 -4
- package/dist/store-reactivity-bindings.cjs +36 -0
- package/dist/store-reactivity-bindings.cjs.map +1 -0
- package/dist/store-reactivity-bindings.d.cts +22 -0
- package/dist/store-reactivity-bindings.d.ts +22 -0
- package/dist/store-reactivity-bindings.js +35 -0
- package/dist/store-reactivity-bindings.js.map +1 -0
- package/dist/utils.cjs +45 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +45 -0
- package/dist/utils.d.ts +45 -0
- package/dist/utils.js +45 -0
- package/dist/utils.js.map +1 -1
- package/package.json +5 -1
- package/src/core/cells/constructCell.ts +5 -0
- package/src/core/cells/coreCellsFeature.ts +5 -0
- package/src/core/cells/coreCellsFeature.utils.ts +30 -0
- package/src/core/columns/constructColumn.ts +7 -1
- package/src/core/columns/coreColumnsFeature.ts +10 -0
- package/src/core/columns/coreColumnsFeature.types.ts +4 -0
- package/src/core/columns/coreColumnsFeature.utils.ts +109 -8
- package/src/core/coreFeatures.ts +5 -0
- package/src/core/headers/buildHeaderGroups.ts +7 -1
- package/src/core/headers/constructHeader.ts +5 -0
- package/src/core/headers/coreHeadersFeature.ts +5 -0
- package/src/core/headers/coreHeadersFeature.utils.ts +86 -8
- package/src/core/reactivity/coreReactivityFeature.types.ts +1 -0
- package/src/core/reactivity/coreReactivityFeature.utils.ts +15 -0
- package/src/core/row-models/coreRowModelsFeature.ts +5 -0
- package/src/core/row-models/coreRowModelsFeature.types.ts +2 -1
- package/src/core/row-models/coreRowModelsFeature.utils.ts +120 -0
- package/src/core/row-models/createCoreRowModel.ts +5 -0
- package/src/core/rows/constructRow.ts +5 -0
- package/src/core/rows/coreRowsFeature.ts +5 -0
- package/src/core/rows/coreRowsFeature.types.ts +3 -0
- package/src/core/rows/coreRowsFeature.utils.ts +106 -7
- package/src/core/table/constructTable.ts +37 -19
- package/src/core/table/coreTablesFeature.ts +5 -0
- package/src/core/table/coreTablesFeature.types.ts +23 -10
- package/src/core/table/coreTablesFeature.utils.ts +74 -1
- package/src/features/column-faceting/columnFacetingFeature.ts +9 -1
- package/src/features/column-faceting/columnFacetingFeature.types.ts +12 -6
- package/src/features/column-faceting/columnFacetingFeature.utils.ts +60 -0
- package/src/features/column-faceting/createFacetedMinMaxValues.ts +5 -0
- package/src/features/column-faceting/createFacetedRowModel.ts +5 -0
- package/src/features/column-faceting/createFacetedUniqueValues.ts +5 -0
- package/src/features/column-filtering/columnFilteringFeature.ts +10 -2
- package/src/features/column-filtering/columnFilteringFeature.types.ts +7 -4
- package/src/features/column-filtering/columnFilteringFeature.utils.ts +113 -2
- package/src/features/column-filtering/createFilteredRowModel.ts +5 -0
- package/src/features/column-filtering/filterRowsUtils.ts +5 -0
- package/src/features/column-grouping/columnGroupingFeature.ts +9 -1
- package/src/features/column-grouping/columnGroupingFeature.types.ts +7 -3
- package/src/features/column-grouping/columnGroupingFeature.utils.ts +151 -0
- package/src/features/column-grouping/createGroupedRowModel.ts +5 -0
- package/src/features/column-ordering/columnOrderingFeature.ts +10 -1
- package/src/features/column-ordering/columnOrderingFeature.types.ts +4 -2
- package/src/features/column-ordering/columnOrderingFeature.utils.ts +110 -18
- package/src/features/column-pinning/columnPinningFeature.ts +11 -12
- package/src/features/column-pinning/columnPinningFeature.types.ts +6 -2
- package/src/features/column-pinning/columnPinningFeature.utils.ts +390 -57
- package/src/features/column-resizing/columnResizingFeature.ts +9 -2
- package/src/features/column-resizing/columnResizingFeature.types.ts +14 -6
- package/src/features/column-resizing/columnResizingFeature.utils.ts +81 -0
- package/src/features/column-sizing/columnSizingFeature.ts +38 -18
- package/src/features/column-sizing/columnSizingFeature.types.ts +6 -3
- package/src/features/column-sizing/columnSizingFeature.utils.ts +168 -9
- package/src/features/column-visibility/columnVisibilityFeature.ts +15 -21
- package/src/features/column-visibility/columnVisibilityFeature.types.ts +4 -3
- package/src/features/column-visibility/columnVisibilityFeature.utils.ts +179 -23
- package/src/features/global-filtering/globalFilteringFeature.ts +9 -2
- package/src/features/global-filtering/globalFilteringFeature.types.ts +4 -2
- package/src/features/global-filtering/globalFilteringFeature.utils.ts +51 -0
- package/src/features/row-expanding/createExpandedRowModel.ts +10 -0
- package/src/features/row-expanding/rowExpandingFeature.ts +9 -1
- package/src/features/row-expanding/rowExpandingFeature.types.ts +10 -5
- package/src/features/row-expanding/rowExpandingFeature.utils.ts +151 -0
- package/src/features/row-pagination/createPaginatedRowModel.ts +5 -0
- package/src/features/row-pagination/rowPaginationFeature.ts +9 -1
- package/src/features/row-pagination/rowPaginationFeature.types.ts +11 -7
- package/src/features/row-pagination/rowPaginationFeature.utils.ts +175 -0
- package/src/features/row-pinning/rowPinningFeature.ts +9 -1
- package/src/features/row-pinning/rowPinningFeature.types.ts +4 -2
- package/src/features/row-pinning/rowPinningFeature.utils.ts +112 -0
- package/src/features/row-selection/rowSelectionFeature.ts +9 -1
- package/src/features/row-selection/rowSelectionFeature.types.ts +4 -2
- package/src/features/row-selection/rowSelectionFeature.utils.ts +259 -0
- package/src/features/row-sorting/createSortedRowModel.ts +5 -0
- package/src/features/row-sorting/rowSortingFeature.ts +11 -3
- package/src/features/row-sorting/rowSortingFeature.types.ts +7 -3
- package/src/features/row-sorting/rowSortingFeature.utils.ts +151 -0
- package/src/features/stockFeatures.ts +5 -0
- package/src/flex-render.ts +10 -0
- package/src/fns/aggregationFns.ts +5 -0
- package/src/fns/filterFns.ts +5 -0
- package/src/fns/sortFns.ts +50 -5
- package/src/helpers/tableOptions.ts +32 -0
- package/src/reactivity.ts +0 -1
- package/src/store-reactivity-bindings.ts +35 -0
- package/src/types/Table.ts +1 -1
- package/src/utils.ts +45 -0
- package/dist/core/reactivity/constructReactivityBindings.cjs +0 -19
- package/dist/core/reactivity/constructReactivityBindings.cjs.map +0 -1
- package/dist/core/reactivity/constructReactivityBindings.d.cts +0 -7
- package/dist/core/reactivity/constructReactivityBindings.d.ts +0 -7
- package/dist/core/reactivity/constructReactivityBindings.js +0 -19
- package/dist/core/reactivity/constructReactivityBindings.js.map +0 -1
- package/src/core/reactivity/constructReactivityBindings.ts +0 -19
|
@@ -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\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;
|
|
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"}
|
package/dist/fns/filterFns.cjs
CHANGED
|
@@ -141,6 +141,11 @@ const filterFn_arrIncludesSome = (row, columnId, filterValue) => {
|
|
|
141
141
|
return filterValue.some((val) => value.includes(val));
|
|
142
142
|
};
|
|
143
143
|
filterFn_arrIncludesSome.autoRemove = (val) => testFalsy(val) || !(val === null || val === void 0 ? void 0 : val.length);
|
|
144
|
+
/**
|
|
145
|
+
* The built-in filter function registry.
|
|
146
|
+
*
|
|
147
|
+
* Pass this object to filtered row model creation or extend it with custom filter functions.
|
|
148
|
+
*/
|
|
144
149
|
const filterFns = {
|
|
145
150
|
arrIncludes: filterFn_arrIncludes,
|
|
146
151
|
arrIncludesAll: filterFn_arrIncludesAll,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterFns.cjs","names":[],"sources":["../../src/fns/filterFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { FilterFn } from '../features/column-filtering/columnFilteringFeature.types'\n\n// Basic filters\n\n/**\n * Filter function for checking if a value is exactly equal to a given value. (JS === comparison)\n */\nexport const filterFn_equals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) === filterValue\n}\n\nfilterFn_equals.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a value is weakly equal to a given value. (JS == comparison)\n */\nexport const filterFn_weakEquals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nfilterFn_weakEquals.autoRemove = (val: any) => testFalsy(val)\n\n// String filters\n\n/**\n * Filter function for checking if a string includes a given substring. (Case-sensitive)\n */\nexport const filterFn_includesStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row.getValue(columnId)?.toString().includes(filterValue.toString()),\n )\n}\n\nfilterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string includes a given substring. (Non-case-sensitive)\n */\nexport const filterFn_includesString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row\n .getValue(columnId)\n ?.toString()\n .toLowerCase()\n .includes(filterValue.toString().toLowerCase()),\n )\n}\n\nfilterFn_includesString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Non-case-sensitive)\n */\nexport const filterFn_equalsString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return (\n row.getValue(columnId)?.toString().toLowerCase() ===\n filterValue.toLowerCase()\n )\n}\n\nfilterFn_equalsString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Case-sensitive)\n */\nexport const filterFn_equalsStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return row.getValue(columnId)?.toString() === filterValue\n}\n\nfilterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n// Number filters\n\n/**\n * Filter function for checking if a number is greater than a given number.\n */\nexport const filterFn_greaterThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n const rowValue = row.getValue(columnId)\n const numericRowValue =\n rowValue === null || rowValue === undefined ? 0 : +rowValue\n const numericFilterValue = +filterValue\n\n if (!isNaN(numericFilterValue) && !isNaN(numericRowValue)) {\n return numericRowValue > numericFilterValue\n }\n\n const stringValue = (rowValue ?? '').toString().toLowerCase().trim()\n const stringFilterValue = filterValue.toString().toLowerCase().trim()\n return stringValue > stringFilterValue\n}\n\nfilterFn_greaterThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is greater than or equal to a given number.\n */\nexport const filterFn_greaterThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return (\n filterFn_greaterThan(row as any, columnId, filterValue) ||\n filterFn_equals(row as any, columnId, filterValue)\n )\n}\n\nfilterFn_greaterThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than a given number.\n */\nexport const filterFn_lessThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThanOrEqualTo(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than or equal to a given number.\n */\nexport const filterFn_lessThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThan(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n// Range filters\n\n/**\n * Filter function for checking if a number or a string is between two given values.\n */\nconst filterFn_between: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThan(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThan(row as any, columnId, filterValues[1]))\n\nfilterFn_between.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number or a string is between two given values or equal to them.\n */\nconst filterFn_betweenInclusive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThanOrEqualTo(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThanOrEqualTo(row as any, columnId, filterValues[1]))\n\nfilterFn_betweenInclusive.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number is within a given range.\n */\nexport const filterFn_inNumberRange: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: [number, number],\n) => {\n const [min, max] = filterValue\n\n const rowValue: number = row.getValue(columnId)\n return rowValue >= min && rowValue <= max\n}\n\nfilterFn_inNumberRange.resolveFilterValue = (val: [any, any]) => {\n const [unsafeMin, unsafeMax] = val\n\n const parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin\n const parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return [min, max] as const\n}\n\nfilterFn_inNumberRange.autoRemove = (val: any) =>\n testFalsy(val) || (testFalsy(val[0]) && testFalsy(val[1]))\n\n// Array filters\n\n/**\n * Filter function for checking if an array has a given value.\n */\nexport const filterFn_arrHas: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) => row.getValue<unknown>(columnId) === val)\n}\n\n/**\n * Filter function for checking if an array includes a given value.\n */\nexport const filterFn_arrIncludes: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) =>\n (row.getValue<unknown>(columnId) as Array<unknown> | string).includes(\n val as any,\n ),\n )\n}\n\nfilterFn_arrIncludes.autoRemove = (val: any) => testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes all of the given values.\n */\nexport const filterFn_arrIncludesAll: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return !filterValue.some((val) => !value.includes(val))\n}\n\nfilterFn_arrIncludesAll.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes any of the given values.\n */\nexport const filterFn_arrIncludesSome: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return filterValue.some((val) => value.includes(val))\n}\n\nfilterFn_arrIncludesSome.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n// Export\n\nexport const filterFns = {\n arrIncludes: filterFn_arrIncludes,\n arrIncludesAll: filterFn_arrIncludesAll,\n arrHas: filterFn_arrHas,\n arrIncludesSome: filterFn_arrIncludesSome,\n between: filterFn_between,\n betweenInclusive: filterFn_betweenInclusive,\n equals: filterFn_equals,\n equalsString: filterFn_equalsString,\n inNumberRange: filterFn_inNumberRange,\n includesString: filterFn_includesString,\n includesStringSensitive: filterFn_includesStringSensitive,\n weakEquals: filterFn_weakEquals,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsy(val: any) {\n return val === undefined || val === null || val === ''\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filterFns.cjs","names":[],"sources":["../../src/fns/filterFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { FilterFn } from '../features/column-filtering/columnFilteringFeature.types'\n\n// Basic filters\n\n/**\n * Filter function for checking if a value is exactly equal to a given value. (JS === comparison)\n */\nexport const filterFn_equals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) === filterValue\n}\n\nfilterFn_equals.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a value is weakly equal to a given value. (JS == comparison)\n */\nexport const filterFn_weakEquals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nfilterFn_weakEquals.autoRemove = (val: any) => testFalsy(val)\n\n// String filters\n\n/**\n * Filter function for checking if a string includes a given substring. (Case-sensitive)\n */\nexport const filterFn_includesStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row.getValue(columnId)?.toString().includes(filterValue.toString()),\n )\n}\n\nfilterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string includes a given substring. (Non-case-sensitive)\n */\nexport const filterFn_includesString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row\n .getValue(columnId)\n ?.toString()\n .toLowerCase()\n .includes(filterValue.toString().toLowerCase()),\n )\n}\n\nfilterFn_includesString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Non-case-sensitive)\n */\nexport const filterFn_equalsString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return (\n row.getValue(columnId)?.toString().toLowerCase() ===\n filterValue.toLowerCase()\n )\n}\n\nfilterFn_equalsString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Case-sensitive)\n */\nexport const filterFn_equalsStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return row.getValue(columnId)?.toString() === filterValue\n}\n\nfilterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n// Number filters\n\n/**\n * Filter function for checking if a number is greater than a given number.\n */\nexport const filterFn_greaterThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n const rowValue = row.getValue(columnId)\n const numericRowValue =\n rowValue === null || rowValue === undefined ? 0 : +rowValue\n const numericFilterValue = +filterValue\n\n if (!isNaN(numericFilterValue) && !isNaN(numericRowValue)) {\n return numericRowValue > numericFilterValue\n }\n\n const stringValue = (rowValue ?? '').toString().toLowerCase().trim()\n const stringFilterValue = filterValue.toString().toLowerCase().trim()\n return stringValue > stringFilterValue\n}\n\nfilterFn_greaterThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is greater than or equal to a given number.\n */\nexport const filterFn_greaterThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return (\n filterFn_greaterThan(row as any, columnId, filterValue) ||\n filterFn_equals(row as any, columnId, filterValue)\n )\n}\n\nfilterFn_greaterThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than a given number.\n */\nexport const filterFn_lessThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThanOrEqualTo(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than or equal to a given number.\n */\nexport const filterFn_lessThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThan(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n// Range filters\n\n/**\n * Filter function for checking if a number or a string is between two given values.\n */\nconst filterFn_between: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThan(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThan(row as any, columnId, filterValues[1]))\n\nfilterFn_between.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number or a string is between two given values or equal to them.\n */\nconst filterFn_betweenInclusive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThanOrEqualTo(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThanOrEqualTo(row as any, columnId, filterValues[1]))\n\nfilterFn_betweenInclusive.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number is within a given range.\n */\nexport const filterFn_inNumberRange: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: [number, number],\n) => {\n const [min, max] = filterValue\n\n const rowValue: number = row.getValue(columnId)\n return rowValue >= min && rowValue <= max\n}\n\nfilterFn_inNumberRange.resolveFilterValue = (val: [any, any]) => {\n const [unsafeMin, unsafeMax] = val\n\n const parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin\n const parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return [min, max] as const\n}\n\nfilterFn_inNumberRange.autoRemove = (val: any) =>\n testFalsy(val) || (testFalsy(val[0]) && testFalsy(val[1]))\n\n// Array filters\n\n/**\n * Filter function for checking if an array has a given value.\n */\nexport const filterFn_arrHas: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) => row.getValue<unknown>(columnId) === val)\n}\n\n/**\n * Filter function for checking if an array includes a given value.\n */\nexport const filterFn_arrIncludes: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) =>\n (row.getValue<unknown>(columnId) as Array<unknown> | string).includes(\n val as any,\n ),\n )\n}\n\nfilterFn_arrIncludes.autoRemove = (val: any) => testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes all of the given values.\n */\nexport const filterFn_arrIncludesAll: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return !filterValue.some((val) => !value.includes(val))\n}\n\nfilterFn_arrIncludesAll.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes any of the given values.\n */\nexport const filterFn_arrIncludesSome: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return filterValue.some((val) => value.includes(val))\n}\n\nfilterFn_arrIncludesSome.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n// Export\n\n/**\n * The built-in filter function registry.\n *\n * Pass this object to filtered row model creation or extend it with custom filter functions.\n */\nexport const filterFns = {\n arrIncludes: filterFn_arrIncludes,\n arrIncludesAll: filterFn_arrIncludesAll,\n arrHas: filterFn_arrHas,\n arrIncludesSome: filterFn_arrIncludesSome,\n between: filterFn_between,\n betweenInclusive: filterFn_betweenInclusive,\n equals: filterFn_equals,\n equalsString: filterFn_equalsString,\n inNumberRange: filterFn_inNumberRange,\n includesString: filterFn_includesString,\n includesStringSensitive: filterFn_includesStringSensitive,\n weakEquals: filterFn_weakEquals,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsy(val: any) {\n return val === undefined || val === null || val === ''\n}\n"],"mappings":"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"}
|
package/dist/fns/filterFns.d.cts
CHANGED
|
@@ -61,6 +61,11 @@ declare const filterFn_arrIncludesAll: FilterFn<any, any>;
|
|
|
61
61
|
* Filter function for checking if an array includes any of the given values.
|
|
62
62
|
*/
|
|
63
63
|
declare const filterFn_arrIncludesSome: FilterFn<any, any>;
|
|
64
|
+
/**
|
|
65
|
+
* The built-in filter function registry.
|
|
66
|
+
*
|
|
67
|
+
* Pass this object to filtered row model creation or extend it with custom filter functions.
|
|
68
|
+
*/
|
|
64
69
|
declare const filterFns: {
|
|
65
70
|
arrIncludes: FilterFn<any, any>;
|
|
66
71
|
arrIncludesAll: FilterFn<any, any>;
|
package/dist/fns/filterFns.d.ts
CHANGED
|
@@ -61,6 +61,11 @@ declare const filterFn_arrIncludesAll: FilterFn<any, any>;
|
|
|
61
61
|
* Filter function for checking if an array includes any of the given values.
|
|
62
62
|
*/
|
|
63
63
|
declare const filterFn_arrIncludesSome: FilterFn<any, any>;
|
|
64
|
+
/**
|
|
65
|
+
* The built-in filter function registry.
|
|
66
|
+
*
|
|
67
|
+
* Pass this object to filtered row model creation or extend it with custom filter functions.
|
|
68
|
+
*/
|
|
64
69
|
declare const filterFns: {
|
|
65
70
|
arrIncludes: FilterFn<any, any>;
|
|
66
71
|
arrIncludesAll: FilterFn<any, any>;
|
package/dist/fns/filterFns.js
CHANGED
|
@@ -140,6 +140,11 @@ const filterFn_arrIncludesSome = (row, columnId, filterValue) => {
|
|
|
140
140
|
return filterValue.some((val) => value.includes(val));
|
|
141
141
|
};
|
|
142
142
|
filterFn_arrIncludesSome.autoRemove = (val) => testFalsy(val) || !(val === null || val === void 0 ? void 0 : val.length);
|
|
143
|
+
/**
|
|
144
|
+
* The built-in filter function registry.
|
|
145
|
+
*
|
|
146
|
+
* Pass this object to filtered row model creation or extend it with custom filter functions.
|
|
147
|
+
*/
|
|
143
148
|
const filterFns = {
|
|
144
149
|
arrIncludes: filterFn_arrIncludes,
|
|
145
150
|
arrIncludesAll: filterFn_arrIncludesAll,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterFns.js","names":[],"sources":["../../src/fns/filterFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { FilterFn } from '../features/column-filtering/columnFilteringFeature.types'\n\n// Basic filters\n\n/**\n * Filter function for checking if a value is exactly equal to a given value. (JS === comparison)\n */\nexport const filterFn_equals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) === filterValue\n}\n\nfilterFn_equals.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a value is weakly equal to a given value. (JS == comparison)\n */\nexport const filterFn_weakEquals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nfilterFn_weakEquals.autoRemove = (val: any) => testFalsy(val)\n\n// String filters\n\n/**\n * Filter function for checking if a string includes a given substring. (Case-sensitive)\n */\nexport const filterFn_includesStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row.getValue(columnId)?.toString().includes(filterValue.toString()),\n )\n}\n\nfilterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string includes a given substring. (Non-case-sensitive)\n */\nexport const filterFn_includesString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row\n .getValue(columnId)\n ?.toString()\n .toLowerCase()\n .includes(filterValue.toString().toLowerCase()),\n )\n}\n\nfilterFn_includesString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Non-case-sensitive)\n */\nexport const filterFn_equalsString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return (\n row.getValue(columnId)?.toString().toLowerCase() ===\n filterValue.toLowerCase()\n )\n}\n\nfilterFn_equalsString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Case-sensitive)\n */\nexport const filterFn_equalsStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return row.getValue(columnId)?.toString() === filterValue\n}\n\nfilterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n// Number filters\n\n/**\n * Filter function for checking if a number is greater than a given number.\n */\nexport const filterFn_greaterThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n const rowValue = row.getValue(columnId)\n const numericRowValue =\n rowValue === null || rowValue === undefined ? 0 : +rowValue\n const numericFilterValue = +filterValue\n\n if (!isNaN(numericFilterValue) && !isNaN(numericRowValue)) {\n return numericRowValue > numericFilterValue\n }\n\n const stringValue = (rowValue ?? '').toString().toLowerCase().trim()\n const stringFilterValue = filterValue.toString().toLowerCase().trim()\n return stringValue > stringFilterValue\n}\n\nfilterFn_greaterThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is greater than or equal to a given number.\n */\nexport const filterFn_greaterThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return (\n filterFn_greaterThan(row as any, columnId, filterValue) ||\n filterFn_equals(row as any, columnId, filterValue)\n )\n}\n\nfilterFn_greaterThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than a given number.\n */\nexport const filterFn_lessThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThanOrEqualTo(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than or equal to a given number.\n */\nexport const filterFn_lessThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThan(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n// Range filters\n\n/**\n * Filter function for checking if a number or a string is between two given values.\n */\nconst filterFn_between: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThan(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThan(row as any, columnId, filterValues[1]))\n\nfilterFn_between.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number or a string is between two given values or equal to them.\n */\nconst filterFn_betweenInclusive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThanOrEqualTo(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThanOrEqualTo(row as any, columnId, filterValues[1]))\n\nfilterFn_betweenInclusive.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number is within a given range.\n */\nexport const filterFn_inNumberRange: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: [number, number],\n) => {\n const [min, max] = filterValue\n\n const rowValue: number = row.getValue(columnId)\n return rowValue >= min && rowValue <= max\n}\n\nfilterFn_inNumberRange.resolveFilterValue = (val: [any, any]) => {\n const [unsafeMin, unsafeMax] = val\n\n const parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin\n const parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return [min, max] as const\n}\n\nfilterFn_inNumberRange.autoRemove = (val: any) =>\n testFalsy(val) || (testFalsy(val[0]) && testFalsy(val[1]))\n\n// Array filters\n\n/**\n * Filter function for checking if an array has a given value.\n */\nexport const filterFn_arrHas: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) => row.getValue<unknown>(columnId) === val)\n}\n\n/**\n * Filter function for checking if an array includes a given value.\n */\nexport const filterFn_arrIncludes: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) =>\n (row.getValue<unknown>(columnId) as Array<unknown> | string).includes(\n val as any,\n ),\n )\n}\n\nfilterFn_arrIncludes.autoRemove = (val: any) => testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes all of the given values.\n */\nexport const filterFn_arrIncludesAll: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return !filterValue.some((val) => !value.includes(val))\n}\n\nfilterFn_arrIncludesAll.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes any of the given values.\n */\nexport const filterFn_arrIncludesSome: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return filterValue.some((val) => value.includes(val))\n}\n\nfilterFn_arrIncludesSome.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n// Export\n\nexport const filterFns = {\n arrIncludes: filterFn_arrIncludes,\n arrIncludesAll: filterFn_arrIncludesAll,\n arrHas: filterFn_arrHas,\n arrIncludesSome: filterFn_arrIncludesSome,\n between: filterFn_between,\n betweenInclusive: filterFn_betweenInclusive,\n equals: filterFn_equals,\n equalsString: filterFn_equalsString,\n inNumberRange: filterFn_inNumberRange,\n includesString: filterFn_includesString,\n includesStringSensitive: filterFn_includesStringSensitive,\n weakEquals: filterFn_weakEquals,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsy(val: any) {\n return val === undefined || val === null || val === ''\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filterFns.js","names":[],"sources":["../../src/fns/filterFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { FilterFn } from '../features/column-filtering/columnFilteringFeature.types'\n\n// Basic filters\n\n/**\n * Filter function for checking if a value is exactly equal to a given value. (JS === comparison)\n */\nexport const filterFn_equals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) === filterValue\n}\n\nfilterFn_equals.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a value is weakly equal to a given value. (JS == comparison)\n */\nexport const filterFn_weakEquals: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: unknown,\n) => {\n return row.getValue(columnId) == filterValue\n}\n\nfilterFn_weakEquals.autoRemove = (val: any) => testFalsy(val)\n\n// String filters\n\n/**\n * Filter function for checking if a string includes a given substring. (Case-sensitive)\n */\nexport const filterFn_includesStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row.getValue(columnId)?.toString().includes(filterValue.toString()),\n )\n}\n\nfilterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string includes a given substring. (Non-case-sensitive)\n */\nexport const filterFn_includesString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return Boolean(\n row\n .getValue(columnId)\n ?.toString()\n .toLowerCase()\n .includes(filterValue.toString().toLowerCase()),\n )\n}\n\nfilterFn_includesString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Non-case-sensitive)\n */\nexport const filterFn_equalsString: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return (\n row.getValue(columnId)?.toString().toLowerCase() ===\n filterValue.toLowerCase()\n )\n}\n\nfilterFn_equalsString.autoRemove = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a string is exactly equal to a given string. (Case-sensitive)\n */\nexport const filterFn_equalsStringSensitive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: string,\n) => {\n return row.getValue(columnId)?.toString() === filterValue\n}\n\nfilterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)\n\n// Number filters\n\n/**\n * Filter function for checking if a number is greater than a given number.\n */\nexport const filterFn_greaterThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n const rowValue = row.getValue(columnId)\n const numericRowValue =\n rowValue === null || rowValue === undefined ? 0 : +rowValue\n const numericFilterValue = +filterValue\n\n if (!isNaN(numericFilterValue) && !isNaN(numericRowValue)) {\n return numericRowValue > numericFilterValue\n }\n\n const stringValue = (rowValue ?? '').toString().toLowerCase().trim()\n const stringFilterValue = filterValue.toString().toLowerCase().trim()\n return stringValue > stringFilterValue\n}\n\nfilterFn_greaterThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is greater than or equal to a given number.\n */\nexport const filterFn_greaterThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return (\n filterFn_greaterThan(row as any, columnId, filterValue) ||\n filterFn_equals(row as any, columnId, filterValue)\n )\n}\n\nfilterFn_greaterThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than a given number.\n */\nexport const filterFn_lessThan: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThanOrEqualTo(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThan.resolveFilterValue = (val: any) => testFalsy(val)\n\n/**\n * Filter function for checking if a number is less than or equal to a given number.\n */\nexport const filterFn_lessThanOrEqualTo: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Date | number | string,\n) => {\n return !filterFn_greaterThan(row as any, columnId, filterValue)\n}\n\nfilterFn_lessThanOrEqualTo.resolveFilterValue = (val: any) => testFalsy(val)\n\n// Range filters\n\n/**\n * Filter function for checking if a number or a string is between two given values.\n */\nconst filterFn_between: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThan(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThan(row as any, columnId, filterValues[1]))\n\nfilterFn_between.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number or a string is between two given values or equal to them.\n */\nconst filterFn_betweenInclusive: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValues: [number | string, number | string],\n): boolean =>\n ((['', undefined] as Array<any>).includes(filterValues[0]) ||\n filterFn_greaterThanOrEqualTo(row as any, columnId, filterValues[0])) &&\n ((!isNaN(+filterValues[0]) &&\n !isNaN(+filterValues[1]) &&\n +filterValues[0] > +filterValues[1]) ||\n (['', undefined] as Array<any>).includes(filterValues[1]) ||\n filterFn_lessThanOrEqualTo(row as any, columnId, filterValues[1]))\n\nfilterFn_betweenInclusive.autoRemove = (val: any) => !val\n\n/**\n * Filter function for checking if a number is within a given range.\n */\nexport const filterFn_inNumberRange: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: [number, number],\n) => {\n const [min, max] = filterValue\n\n const rowValue: number = row.getValue(columnId)\n return rowValue >= min && rowValue <= max\n}\n\nfilterFn_inNumberRange.resolveFilterValue = (val: [any, any]) => {\n const [unsafeMin, unsafeMax] = val\n\n const parsedMin =\n typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin\n const parsedMax =\n typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax\n\n let min =\n unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax\n\n if (min > max) {\n const temp = min\n min = max\n max = temp\n }\n\n return [min, max] as const\n}\n\nfilterFn_inNumberRange.autoRemove = (val: any) =>\n testFalsy(val) || (testFalsy(val[0]) && testFalsy(val[1]))\n\n// Array filters\n\n/**\n * Filter function for checking if an array has a given value.\n */\nexport const filterFn_arrHas: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) => row.getValue<unknown>(columnId) === val)\n}\n\n/**\n * Filter function for checking if an array includes a given value.\n */\nexport const filterFn_arrIncludes: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n return filterValue.some((val) =>\n (row.getValue<unknown>(columnId) as Array<unknown> | string).includes(\n val as any,\n ),\n )\n}\n\nfilterFn_arrIncludes.autoRemove = (val: any) => testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes all of the given values.\n */\nexport const filterFn_arrIncludesAll: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return !filterValue.some((val) => !value.includes(val))\n}\n\nfilterFn_arrIncludesAll.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n/**\n * Filter function for checking if an array includes any of the given values.\n */\nexport const filterFn_arrIncludesSome: FilterFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n row: Row<TFeatures, TData>,\n columnId: string,\n filterValue: Array<unknown>,\n) => {\n const value = row.getValue<Array<unknown>>(columnId)\n if (!Array.isArray(value)) return false\n return filterValue.some((val) => value.includes(val))\n}\n\nfilterFn_arrIncludesSome.autoRemove = (val: any) =>\n testFalsy(val) || !val?.length\n\n// Export\n\n/**\n * The built-in filter function registry.\n *\n * Pass this object to filtered row model creation or extend it with custom filter functions.\n */\nexport const filterFns = {\n arrIncludes: filterFn_arrIncludes,\n arrIncludesAll: filterFn_arrIncludesAll,\n arrHas: filterFn_arrHas,\n arrIncludesSome: filterFn_arrIncludesSome,\n between: filterFn_between,\n betweenInclusive: filterFn_betweenInclusive,\n equals: filterFn_equals,\n equalsString: filterFn_equalsString,\n inNumberRange: filterFn_inNumberRange,\n includesString: filterFn_includesString,\n includesStringSensitive: filterFn_includesStringSensitive,\n weakEquals: filterFn_weakEquals,\n}\n\nexport type BuiltInFilterFn = keyof typeof filterFns\n\n// Utils\n\nfunction testFalsy(val: any) {\n return val === undefined || val === null || val === ''\n}\n"],"mappings":"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"}
|
package/dist/fns/sortFns.cjs
CHANGED
|
@@ -1,23 +1,59 @@
|
|
|
1
1
|
|
|
2
2
|
//#region src/fns/sortFns.ts
|
|
3
|
+
/**
|
|
4
|
+
* Regular expression used to split mixed text and numeric chunks.
|
|
5
|
+
*
|
|
6
|
+
* The alphanumeric sort functions use these chunks for natural sorting of
|
|
7
|
+
* strings like `item2` before `item10`.
|
|
8
|
+
*/
|
|
3
9
|
const reSplitAlphaNumeric = /([0-9]+)/gm;
|
|
10
|
+
/**
|
|
11
|
+
* Sorts rows with the built-in alphanumeric strategy.
|
|
12
|
+
*
|
|
13
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
14
|
+
*/
|
|
4
15
|
const sortFn_alphanumeric = (rowA, rowB, columnId) => {
|
|
5
16
|
return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
6
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Sorts rows with the built-in alphanumeric case sensitive strategy.
|
|
20
|
+
*
|
|
21
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
22
|
+
*/
|
|
7
23
|
const sortFn_alphanumericCaseSensitive = (rowA, rowB, columnId) => {
|
|
8
24
|
return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
9
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* Sorts rows with the built-in text strategy.
|
|
28
|
+
*
|
|
29
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
30
|
+
*/
|
|
10
31
|
const sortFn_text = (rowA, rowB, columnId) => {
|
|
11
32
|
return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
12
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Sorts rows with the built-in text case sensitive strategy.
|
|
36
|
+
*
|
|
37
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
38
|
+
*/
|
|
13
39
|
const sortFn_textCaseSensitive = (rowA, rowB, columnId) => {
|
|
14
40
|
return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
15
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* Sorts rows with the built-in datetime strategy.
|
|
44
|
+
*
|
|
45
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
46
|
+
*/
|
|
16
47
|
const sortFn_datetime = (rowA, rowB, columnId) => {
|
|
17
48
|
const a = rowA.getValue(columnId);
|
|
18
49
|
const b = rowB.getValue(columnId);
|
|
19
50
|
return a > b ? 1 : a < b ? -1 : 0;
|
|
20
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Sorts rows with the built-in basic strategy.
|
|
54
|
+
*
|
|
55
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
56
|
+
*/
|
|
21
57
|
const sortFn_basic = (rowA, rowB, columnId) => {
|
|
22
58
|
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
23
59
|
};
|
|
@@ -35,9 +71,13 @@ function toString(a) {
|
|
|
35
71
|
function compareAlphanumeric(aStr, bStr) {
|
|
36
72
|
const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);
|
|
37
73
|
const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
74
|
+
let ai = 0;
|
|
75
|
+
let bi = 0;
|
|
76
|
+
const aLen = a.length;
|
|
77
|
+
const bLen = b.length;
|
|
78
|
+
while (ai < aLen && bi < bLen) {
|
|
79
|
+
const aa = a[ai++];
|
|
80
|
+
const bb = b[bi++];
|
|
41
81
|
const an = parseInt(aa, 10);
|
|
42
82
|
const bn = parseInt(bb, 10);
|
|
43
83
|
const combo = [an, bn].sort();
|
|
@@ -50,8 +90,13 @@ function compareAlphanumeric(aStr, bStr) {
|
|
|
50
90
|
if (an > bn) return 1;
|
|
51
91
|
if (bn > an) return -1;
|
|
52
92
|
}
|
|
53
|
-
return
|
|
93
|
+
return aLen - ai - (bLen - bi);
|
|
54
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* The built-in sorting function registry.
|
|
97
|
+
*
|
|
98
|
+
* Pass this object to sorted row model creation or extend it with custom sorting functions.
|
|
99
|
+
*/
|
|
55
100
|
const sortFns = {
|
|
56
101
|
alphanumeric: sortFn_alphanumeric,
|
|
57
102
|
alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,
|
package/dist/fns/sortFns.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortFns.cjs","names":[],"sources":["../../src/fns/sortFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { SortFn } from '../features/row-sorting/rowSortingFeature.types'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nexport const sortFn_alphanumeric: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\nexport const sortFn_alphanumericCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nexport const sortFn_text: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nexport const sortFn_textCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\nexport const sortFn_datetime: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n const a: number | string = rowA.getValue(columnId)\n const b: number | string = rowB.getValue(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nexport const sortFn_basic: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n
|
|
1
|
+
{"version":3,"file":"sortFns.cjs","names":[],"sources":["../../src/fns/sortFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { SortFn } from '../features/row-sorting/rowSortingFeature.types'\n\n/**\n * Regular expression used to split mixed text and numeric chunks.\n *\n * The alphanumeric sort functions use these chunks for natural sorting of\n * strings like `item2` before `item10`.\n */\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\n/**\n * Sorts rows with the built-in alphanumeric strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_alphanumeric: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\n/**\n * Sorts rows with the built-in alphanumeric case sensitive strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_alphanumericCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\n/**\n * Sorts rows with the built-in text strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_text: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\n/**\n * Sorts rows with the built-in text case sensitive strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_textCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\n/**\n * Sorts rows with the built-in datetime strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_datetime: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n const a: number | string = rowA.getValue(columnId)\n const b: number | string = rowB.getValue(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\n/**\n * Sorts rows with the built-in basic strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_basic: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n let ai = 0\n let bi = 0\n const aLen = a.length\n const bLen = b.length\n\n while (ai < aLen && bi < bLen) {\n const aa = a[ai++]!\n const bb = b[bi++]!\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return aLen - ai - (bLen - bi)\n}\n\n// Exports\n\n/**\n * The built-in sorting function registry.\n *\n * Pass this object to sorted row model creation or extend it with custom sorting functions.\n */\nexport const sortFns = {\n alphanumeric: sortFn_alphanumeric,\n alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,\n basic: sortFn_basic,\n datetime: sortFn_datetime,\n text: sortFn_text,\n textCaseSensitive: sortFn_textCaseSensitive,\n}\n\nexport type BuiltInSortFn = keyof typeof sortFns\n"],"mappings":";;;;;;;;AAWA,MAAa,sBAAsB;;;;;;AAOnC,MAAa,uBAIX,MACA,MACA,aACG;CACH,OAAO,oBACL,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,EAC/C,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,CAChD;;;;;;;AAQH,MAAa,oCAIX,MACA,MACA,aACG;CACH,OAAO,oBACL,SAAS,KAAK,SAAS,SAAS,CAAC,EACjC,SAAS,KAAK,SAAS,SAAS,CAAC,CAClC;;;;;;;AAUH,MAAa,eAIX,MACA,MACA,aACG;CACH,OAAO,aACL,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,EAC/C,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,CAChD;;;;;;;AAUH,MAAa,4BAIX,MACA,MACA,aACG;CACH,OAAO,aACL,SAAS,KAAK,SAAS,SAAS,CAAC,EACjC,SAAS,KAAK,SAAS,SAAS,CAAC,CAClC;;;;;;;AAQH,MAAa,mBAIX,MACA,MACA,aACG;CACH,MAAM,IAAqB,KAAK,SAAS,SAAS;CAClD,MAAM,IAAqB,KAAK,SAAS,SAAS;CAKlD,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;;;;;;;AAQlC,MAAa,gBAIX,MACA,MACA,aACG;CACH,OAAO,aAAa,KAAK,SAAS,SAAS,EAAE,KAAK,SAAS,SAAS,CAAC;;AAKvE,SAAS,aAAa,GAAQ,GAAQ;CACpC,OAAO,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;;AAGnC,SAAS,SAAS,GAAQ;CACxB,IAAI,OAAO,MAAM,UAAU;EACzB,IAAI,MAAM,EAAE,IAAI,MAAM,YAAY,MAAM,WACtC,OAAO;EAET,OAAO,OAAO,EAAE;;CAElB,IAAI,OAAO,MAAM,UACf,OAAO;CAET,OAAO;;AAMT,SAAS,oBAAoB,MAAc,MAAc;CAGvD,MAAM,IAAI,KAAK,MAAM,oBAAoB,CAAC,OAAO,QAAQ;CACzD,MAAM,IAAI,KAAK,MAAM,oBAAoB,CAAC,OAAO,QAAQ;CAEzD,IAAI,KAAK;CACT,IAAI,KAAK;CACT,MAAM,OAAO,EAAE;CACf,MAAM,OAAO,EAAE;CAEf,OAAO,KAAK,QAAQ,KAAK,MAAM;EAC7B,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,EAAE;EAEb,MAAM,KAAK,SAAS,IAAI,GAAG;EAC3B,MAAM,KAAK,SAAS,IAAI,GAAG;EAE3B,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM;EAG7B,IAAI,MAAM,MAAM,GAAI,EAAE;GACpB,IAAI,KAAK,IACP,OAAO;GAET,IAAI,KAAK,IACP,OAAO;GAET;;EAIF,IAAI,MAAM,MAAM,GAAI,EAClB,OAAO,MAAM,GAAG,GAAG,KAAK;EAI1B,IAAI,KAAK,IACP,OAAO;EAET,IAAI,KAAK,IACP,OAAO;;CAIX,OAAO,OAAO,MAAM,OAAO;;;;;;;AAU7B,MAAa,UAAU;CACrB,cAAc;CACd,2BAA2B;CAC3B,OAAO;CACP,UAAU;CACV,MAAM;CACN,mBAAmB;CACpB"}
|
package/dist/fns/sortFns.d.cts
CHANGED
|
@@ -1,13 +1,54 @@
|
|
|
1
1
|
import { SortFn } from "../features/row-sorting/rowSortingFeature.types.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/fns/sortFns.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Regular expression used to split mixed text and numeric chunks.
|
|
6
|
+
*
|
|
7
|
+
* The alphanumeric sort functions use these chunks for natural sorting of
|
|
8
|
+
* strings like `item2` before `item10`.
|
|
9
|
+
*/
|
|
4
10
|
declare const reSplitAlphaNumeric: RegExp;
|
|
11
|
+
/**
|
|
12
|
+
* Sorts rows with the built-in alphanumeric strategy.
|
|
13
|
+
*
|
|
14
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
15
|
+
*/
|
|
5
16
|
declare const sortFn_alphanumeric: SortFn<any, any>;
|
|
17
|
+
/**
|
|
18
|
+
* Sorts rows with the built-in alphanumeric case sensitive strategy.
|
|
19
|
+
*
|
|
20
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
21
|
+
*/
|
|
6
22
|
declare const sortFn_alphanumericCaseSensitive: SortFn<any, any>;
|
|
23
|
+
/**
|
|
24
|
+
* Sorts rows with the built-in text strategy.
|
|
25
|
+
*
|
|
26
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
27
|
+
*/
|
|
7
28
|
declare const sortFn_text: SortFn<any, any>;
|
|
29
|
+
/**
|
|
30
|
+
* Sorts rows with the built-in text case sensitive strategy.
|
|
31
|
+
*
|
|
32
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
33
|
+
*/
|
|
8
34
|
declare const sortFn_textCaseSensitive: SortFn<any, any>;
|
|
35
|
+
/**
|
|
36
|
+
* Sorts rows with the built-in datetime strategy.
|
|
37
|
+
*
|
|
38
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
39
|
+
*/
|
|
9
40
|
declare const sortFn_datetime: SortFn<any, any>;
|
|
41
|
+
/**
|
|
42
|
+
* Sorts rows with the built-in basic strategy.
|
|
43
|
+
*
|
|
44
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
45
|
+
*/
|
|
10
46
|
declare const sortFn_basic: SortFn<any, any>;
|
|
47
|
+
/**
|
|
48
|
+
* The built-in sorting function registry.
|
|
49
|
+
*
|
|
50
|
+
* Pass this object to sorted row model creation or extend it with custom sorting functions.
|
|
51
|
+
*/
|
|
11
52
|
declare const sortFns: {
|
|
12
53
|
alphanumeric: SortFn<any, any>;
|
|
13
54
|
alphanumericCaseSensitive: SortFn<any, any>;
|
package/dist/fns/sortFns.d.ts
CHANGED
|
@@ -1,13 +1,54 @@
|
|
|
1
1
|
import { SortFn } from "../features/row-sorting/rowSortingFeature.types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/fns/sortFns.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Regular expression used to split mixed text and numeric chunks.
|
|
6
|
+
*
|
|
7
|
+
* The alphanumeric sort functions use these chunks for natural sorting of
|
|
8
|
+
* strings like `item2` before `item10`.
|
|
9
|
+
*/
|
|
4
10
|
declare const reSplitAlphaNumeric: RegExp;
|
|
11
|
+
/**
|
|
12
|
+
* Sorts rows with the built-in alphanumeric strategy.
|
|
13
|
+
*
|
|
14
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
15
|
+
*/
|
|
5
16
|
declare const sortFn_alphanumeric: SortFn<any, any>;
|
|
17
|
+
/**
|
|
18
|
+
* Sorts rows with the built-in alphanumeric case sensitive strategy.
|
|
19
|
+
*
|
|
20
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
21
|
+
*/
|
|
6
22
|
declare const sortFn_alphanumericCaseSensitive: SortFn<any, any>;
|
|
23
|
+
/**
|
|
24
|
+
* Sorts rows with the built-in text strategy.
|
|
25
|
+
*
|
|
26
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
27
|
+
*/
|
|
7
28
|
declare const sortFn_text: SortFn<any, any>;
|
|
29
|
+
/**
|
|
30
|
+
* Sorts rows with the built-in text case sensitive strategy.
|
|
31
|
+
*
|
|
32
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
33
|
+
*/
|
|
8
34
|
declare const sortFn_textCaseSensitive: SortFn<any, any>;
|
|
35
|
+
/**
|
|
36
|
+
* Sorts rows with the built-in datetime strategy.
|
|
37
|
+
*
|
|
38
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
39
|
+
*/
|
|
9
40
|
declare const sortFn_datetime: SortFn<any, any>;
|
|
41
|
+
/**
|
|
42
|
+
* Sorts rows with the built-in basic strategy.
|
|
43
|
+
*
|
|
44
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
45
|
+
*/
|
|
10
46
|
declare const sortFn_basic: SortFn<any, any>;
|
|
47
|
+
/**
|
|
48
|
+
* The built-in sorting function registry.
|
|
49
|
+
*
|
|
50
|
+
* Pass this object to sorted row model creation or extend it with custom sorting functions.
|
|
51
|
+
*/
|
|
11
52
|
declare const sortFns: {
|
|
12
53
|
alphanumeric: SortFn<any, any>;
|
|
13
54
|
alphanumericCaseSensitive: SortFn<any, any>;
|
package/dist/fns/sortFns.js
CHANGED
|
@@ -1,22 +1,58 @@
|
|
|
1
1
|
//#region src/fns/sortFns.ts
|
|
2
|
+
/**
|
|
3
|
+
* Regular expression used to split mixed text and numeric chunks.
|
|
4
|
+
*
|
|
5
|
+
* The alphanumeric sort functions use these chunks for natural sorting of
|
|
6
|
+
* strings like `item2` before `item10`.
|
|
7
|
+
*/
|
|
2
8
|
const reSplitAlphaNumeric = /([0-9]+)/gm;
|
|
9
|
+
/**
|
|
10
|
+
* Sorts rows with the built-in alphanumeric strategy.
|
|
11
|
+
*
|
|
12
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
13
|
+
*/
|
|
3
14
|
const sortFn_alphanumeric = (rowA, rowB, columnId) => {
|
|
4
15
|
return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
5
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* Sorts rows with the built-in alphanumeric case sensitive strategy.
|
|
19
|
+
*
|
|
20
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
21
|
+
*/
|
|
6
22
|
const sortFn_alphanumericCaseSensitive = (rowA, rowB, columnId) => {
|
|
7
23
|
return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
8
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Sorts rows with the built-in text strategy.
|
|
27
|
+
*
|
|
28
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
29
|
+
*/
|
|
9
30
|
const sortFn_text = (rowA, rowB, columnId) => {
|
|
10
31
|
return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());
|
|
11
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* Sorts rows with the built-in text case sensitive strategy.
|
|
35
|
+
*
|
|
36
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
37
|
+
*/
|
|
12
38
|
const sortFn_textCaseSensitive = (rowA, rowB, columnId) => {
|
|
13
39
|
return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));
|
|
14
40
|
};
|
|
41
|
+
/**
|
|
42
|
+
* Sorts rows with the built-in datetime strategy.
|
|
43
|
+
*
|
|
44
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
45
|
+
*/
|
|
15
46
|
const sortFn_datetime = (rowA, rowB, columnId) => {
|
|
16
47
|
const a = rowA.getValue(columnId);
|
|
17
48
|
const b = rowB.getValue(columnId);
|
|
18
49
|
return a > b ? 1 : a < b ? -1 : 0;
|
|
19
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* Sorts rows with the built-in basic strategy.
|
|
53
|
+
*
|
|
54
|
+
* This comparator returns ascending-order results; descending order is applied by the sorting row model.
|
|
55
|
+
*/
|
|
20
56
|
const sortFn_basic = (rowA, rowB, columnId) => {
|
|
21
57
|
return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));
|
|
22
58
|
};
|
|
@@ -34,9 +70,13 @@ function toString(a) {
|
|
|
34
70
|
function compareAlphanumeric(aStr, bStr) {
|
|
35
71
|
const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);
|
|
36
72
|
const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
73
|
+
let ai = 0;
|
|
74
|
+
let bi = 0;
|
|
75
|
+
const aLen = a.length;
|
|
76
|
+
const bLen = b.length;
|
|
77
|
+
while (ai < aLen && bi < bLen) {
|
|
78
|
+
const aa = a[ai++];
|
|
79
|
+
const bb = b[bi++];
|
|
40
80
|
const an = parseInt(aa, 10);
|
|
41
81
|
const bn = parseInt(bb, 10);
|
|
42
82
|
const combo = [an, bn].sort();
|
|
@@ -49,8 +89,13 @@ function compareAlphanumeric(aStr, bStr) {
|
|
|
49
89
|
if (an > bn) return 1;
|
|
50
90
|
if (bn > an) return -1;
|
|
51
91
|
}
|
|
52
|
-
return
|
|
92
|
+
return aLen - ai - (bLen - bi);
|
|
53
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* The built-in sorting function registry.
|
|
96
|
+
*
|
|
97
|
+
* Pass this object to sorted row model creation or extend it with custom sorting functions.
|
|
98
|
+
*/
|
|
54
99
|
const sortFns = {
|
|
55
100
|
alphanumeric: sortFn_alphanumeric,
|
|
56
101
|
alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,
|
package/dist/fns/sortFns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortFns.js","names":[],"sources":["../../src/fns/sortFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { SortFn } from '../features/row-sorting/rowSortingFeature.types'\n\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\nexport const sortFn_alphanumeric: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\nexport const sortFn_alphanumericCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nexport const sortFn_text: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nexport const sortFn_textCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\nexport const sortFn_datetime: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n const a: number | string = rowA.getValue(columnId)\n const b: number | string = rowB.getValue(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\nexport const sortFn_basic: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n
|
|
1
|
+
{"version":3,"file":"sortFns.js","names":[],"sources":["../../src/fns/sortFns.ts"],"sourcesContent":["import type { RowData } from '../types/type-utils'\nimport type { TableFeatures } from '../types/TableFeatures'\nimport type { Row } from '../types/Row'\nimport type { SortFn } from '../features/row-sorting/rowSortingFeature.types'\n\n/**\n * Regular expression used to split mixed text and numeric chunks.\n *\n * The alphanumeric sort functions use these chunks for natural sorting of\n * strings like `item2` before `item10`.\n */\nexport const reSplitAlphaNumeric = /([0-9]+)/gm\n\n/**\n * Sorts rows with the built-in alphanumeric strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_alphanumeric: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\n/**\n * Sorts rows with the built-in alphanumeric case sensitive strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_alphanumericCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareAlphanumeric(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\n/**\n * Sorts rows with the built-in text strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_text: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)).toLowerCase(),\n toString(rowB.getValue(columnId)).toLowerCase(),\n )\n}\n\n// The text filter is more basic (less numeric support)\n// but is much faster\n/**\n * Sorts rows with the built-in text case sensitive strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_textCaseSensitive: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(\n toString(rowA.getValue(columnId)),\n toString(rowB.getValue(columnId)),\n )\n}\n\n/**\n * Sorts rows with the built-in datetime strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_datetime: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n const a: number | string = rowA.getValue(columnId)\n const b: number | string = rowB.getValue(columnId)\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0\n}\n\n/**\n * Sorts rows with the built-in basic strategy.\n *\n * This comparator returns ascending-order results; descending order is applied by the sorting row model.\n */\nexport const sortFn_basic: SortFn<any, any> = <\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n rowA: Row<any, any>,\n rowB: Row<any, any>,\n columnId: string,\n) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId))\n}\n\n// Utils\n\nfunction compareBasic(a: any, b: any) {\n return a === b ? 0 : a > b ? 1 : -1\n}\n\nfunction toString(a: any) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return ''\n }\n return String(a)\n }\n if (typeof a === 'string') {\n return a\n }\n return ''\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr: string, bStr: string) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean)\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean)\n\n let ai = 0\n let bi = 0\n const aLen = a.length\n const bLen = b.length\n\n while (ai < aLen && bi < bLen) {\n const aa = a[ai++]!\n const bb = b[bi++]!\n\n const an = parseInt(aa, 10)\n const bn = parseInt(bb, 10)\n\n const combo = [an, bn].sort()\n\n // Both are string\n if (isNaN(combo[0]!)) {\n if (aa > bb) {\n return 1\n }\n if (bb > aa) {\n return -1\n }\n continue\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1]!)) {\n return isNaN(an) ? -1 : 1\n }\n\n // Both are numbers\n if (an > bn) {\n return 1\n }\n if (bn > an) {\n return -1\n }\n }\n\n return aLen - ai - (bLen - bi)\n}\n\n// Exports\n\n/**\n * The built-in sorting function registry.\n *\n * Pass this object to sorted row model creation or extend it with custom sorting functions.\n */\nexport const sortFns = {\n alphanumeric: sortFn_alphanumeric,\n alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,\n basic: sortFn_basic,\n datetime: sortFn_datetime,\n text: sortFn_text,\n textCaseSensitive: sortFn_textCaseSensitive,\n}\n\nexport type BuiltInSortFn = keyof typeof sortFns\n"],"mappings":";;;;;;;AAWA,MAAa,sBAAsB;;;;;;AAOnC,MAAa,uBAIX,MACA,MACA,aACG;CACH,OAAO,oBACL,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,EAC/C,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,CAChD;;;;;;;AAQH,MAAa,oCAIX,MACA,MACA,aACG;CACH,OAAO,oBACL,SAAS,KAAK,SAAS,SAAS,CAAC,EACjC,SAAS,KAAK,SAAS,SAAS,CAAC,CAClC;;;;;;;AAUH,MAAa,eAIX,MACA,MACA,aACG;CACH,OAAO,aACL,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,EAC/C,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,aAAa,CAChD;;;;;;;AAUH,MAAa,4BAIX,MACA,MACA,aACG;CACH,OAAO,aACL,SAAS,KAAK,SAAS,SAAS,CAAC,EACjC,SAAS,KAAK,SAAS,SAAS,CAAC,CAClC;;;;;;;AAQH,MAAa,mBAIX,MACA,MACA,aACG;CACH,MAAM,IAAqB,KAAK,SAAS,SAAS;CAClD,MAAM,IAAqB,KAAK,SAAS,SAAS;CAKlD,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK;;;;;;;AAQlC,MAAa,gBAIX,MACA,MACA,aACG;CACH,OAAO,aAAa,KAAK,SAAS,SAAS,EAAE,KAAK,SAAS,SAAS,CAAC;;AAKvE,SAAS,aAAa,GAAQ,GAAQ;CACpC,OAAO,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;;AAGnC,SAAS,SAAS,GAAQ;CACxB,IAAI,OAAO,MAAM,UAAU;EACzB,IAAI,MAAM,EAAE,IAAI,MAAM,YAAY,MAAM,WACtC,OAAO;EAET,OAAO,OAAO,EAAE;;CAElB,IAAI,OAAO,MAAM,UACf,OAAO;CAET,OAAO;;AAMT,SAAS,oBAAoB,MAAc,MAAc;CAGvD,MAAM,IAAI,KAAK,MAAM,oBAAoB,CAAC,OAAO,QAAQ;CACzD,MAAM,IAAI,KAAK,MAAM,oBAAoB,CAAC,OAAO,QAAQ;CAEzD,IAAI,KAAK;CACT,IAAI,KAAK;CACT,MAAM,OAAO,EAAE;CACf,MAAM,OAAO,EAAE;CAEf,OAAO,KAAK,QAAQ,KAAK,MAAM;EAC7B,MAAM,KAAK,EAAE;EACb,MAAM,KAAK,EAAE;EAEb,MAAM,KAAK,SAAS,IAAI,GAAG;EAC3B,MAAM,KAAK,SAAS,IAAI,GAAG;EAE3B,MAAM,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM;EAG7B,IAAI,MAAM,MAAM,GAAI,EAAE;GACpB,IAAI,KAAK,IACP,OAAO;GAET,IAAI,KAAK,IACP,OAAO;GAET;;EAIF,IAAI,MAAM,MAAM,GAAI,EAClB,OAAO,MAAM,GAAG,GAAG,KAAK;EAI1B,IAAI,KAAK,IACP,OAAO;EAET,IAAI,KAAK,IACP,OAAO;;CAIX,OAAO,OAAO,MAAM,OAAO;;;;;;;AAU7B,MAAa,UAAU;CACrB,cAAc;CACd,2BAA2B;CAC3B,OAAO;CACP,UAAU;CACV,MAAM;CACN,mBAAmB;CACpB"}
|