import { SortOrder } from '../../AdaptableState/Common/Enums';
import { GridCell } from '../../AdaptableState/Selection/GridCell';
export type NonEmptyArray<T> = [T, ...Array<T>];
export declare function GetLength(arrayToCheck: any[]): number;
export declare function CorrectLength(arrayToCheck: any[], requiredLength: number): boolean;
export declare function NotCorrectLength(arrayToCheck: any[], requiredLength: number): boolean;
export declare function AddItem(array: any[], itemToAdd: any): void;
export declare function ContainsItem<T>(array: T[], itemToCheck: T): boolean;
export declare function ContainsAnyItem<T>(array: T[], itemsToCheck: T[]): boolean;
export declare function NotContainsItem<T>(array: T[], itemToCheck: T): boolean;
export declare function RetrieveDistinct(array: any[]): any[];
export declare function IsNull(arrayToCheck: any[] | undefined | null): boolean;
export declare function IsNotNull(arrayToCheck: any[] | undefined | null): boolean;
export declare function IsEmpty(arrayToCheck: any[]): boolean;
export declare function IsNotEmpty(arrayToCheck: any[]): boolean;
export declare function IsNullOrEmpty(arrayToCheck: any[] | undefined | null): boolean;
export declare function IsNotNullOrEmpty(arrayToCheck: any[] | undefined | null): boolean;
export declare function IsNullOrEmptyOrContainsSingleEmptyValue(arrayToCheck: any[]): boolean;
export declare function IsNotNullOrEmptyNorContainsSingleEmptyValue(arrayToCheck: any[]): boolean;
export declare function HasSingleEmptyValue(arrayToCheck: any[]): boolean;
export declare function getOccurrence(arrayToCheck: any[], valueToCheck: any): number;
export declare function hasOneItem(arrayToCheck: any[]): boolean;
export declare function hasItemsOfCount(arrayToCheck: any[], numberOfItems: number): boolean;
export declare function moveArray(array: any[], from: number, to: number): void;
export declare function areArraysEqual(arr1: any[], arr2: any[]): boolean;
export declare function areArraysNotEqual(arr1: any[], arr2: any[]): boolean;
export declare function areArraysEqualWithOrder(arr1: any[], arr2: any[]): boolean;
/**
 * Checks if two arrays contain the same elements (order-independent).
 *
 * @param arr1 First array to compare
 * @param arr2 Second array to compare
 * @param equalityFn Optional function to determine if two elements are equal
 * @returns True if arrays contain the same elements, false otherwise
 */
export declare function areArraysEqualWithCustomComparator<T>(arr1: T[] | null | undefined, arr2: T[] | null | undefined, equalityFn?: (a: T, b: T) => boolean): boolean;
export declare function areArraysEqualWithOrderAndProperties(value: any[], other: any[]): boolean;
export declare function sortArrayWithProperty(sortOrder: SortOrder, values: any[], sortProperty?: string): any[];
export declare function sortArray(values: any[], sortOrder?: SortOrder): any[];
export declare const getGenericComparatorForGridCell: (sortOrder: SortOrder) => (a: GridCell, b: GridCell) => number;
export declare function sortCellValueArray<T extends GridCell>(cellValues: T[], sortOrder?: SortOrder): T[];
export declare const getNumericComparatorForGridCell: (sortOrder: SortOrder) => (a: GridCell, b: GridCell) => number;
export declare function sortCellValueArrayNumeric<T extends GridCell>(cellValues: T[], sortOrder?: SortOrder): T[];
export declare const getDateComparatorForGridCell: (sortOrder: SortOrder) => (a: GridCell, b: GridCell) => number;
export declare function sortCellValueArrayDates<T extends GridCell>(cellValues: T[], sortOrder?: SortOrder): T[];
export declare function groupArrayBy(array: Array<any>, prop: string): Array<any>;
export declare function createCommaSeparatedString(values: any[]): string;
export declare function SumArray(array: (number | undefined)[]): number;
export declare function reorderArray(array: any[], startIndex: number, endIndex: number): any[];
export declare function sortArrayWithOrder<T>(array: T[], order: T[], 
/**
 *
 * The array can contain items which are not listed in the order array.
 * So sortUnorderedItems decides whether to leave these items untouched
 * in the current order in which they are in the array (sortUnorderedItems: false)
 * or to sort them using normal comparison rules
 */
{ sortUnorderedItems }: {
    sortUnorderedItems: boolean;
}): T[];
/**
 * Creates an array of elements split into groups the length of `size`.
 * If `array` can't be split evenly, the final chunk will be the remaining elements.
 * Drop-in replacement for lodash/chunk.
 */
export declare function chunk<T>(array: T[], size?: number): T[][];
/**
 * Flattens array a single level deep.
 * Drop-in replacement for lodash/flatten.
 */
export declare function flatten<T>(array: (T | T[])[]): T[];
/**
 * Recursively flattens array.
 * Drop-in replacement for lodash/flattenDeep.
 */
export declare function flattenDeep<T>(array: any[]): T[];
/**
 * Creates a duplicate-free version of an array, using SameValueZero for equality
 * comparisons, in which only the first occurrence of each element is kept.
 * Drop-in replacement for lodash/uniq.
 */
export declare function uniq<T>(array: T[]): T[];
/**
 * Checks if `value` is classified as an Array object.
 * Drop-in replacement for lodash/isArray.
 */
export declare const isArray: (value: any) => value is any[];
export declare const ArrayExtensions: {
    GetLength: typeof GetLength;
    CorrectLength: typeof CorrectLength;
    NotCorrectLength: typeof NotCorrectLength;
    groupArrayBy: typeof groupArrayBy;
    AddItem: typeof AddItem;
    ContainsItem: typeof ContainsItem;
    NotContainsItem: typeof NotContainsItem;
    ContainsAnyItem: typeof ContainsAnyItem;
    RetrieveDistinct: typeof RetrieveDistinct;
    IsNull: typeof IsNull;
    IsNotNull: typeof IsNotNull;
    IsEmpty: typeof IsEmpty;
    IsNotEmpty: typeof IsNotEmpty;
    IsNullOrEmpty: typeof IsNullOrEmpty;
    IsNotNullOrEmpty: typeof IsNotNullOrEmpty;
    IsNullOrEmptyOrContainsSingleEmptyValue: typeof IsNullOrEmptyOrContainsSingleEmptyValue;
    IsNotNullOrEmptyNorContainsSingleEmptyValue: typeof IsNotNullOrEmptyNorContainsSingleEmptyValue;
    HasSingleEmptyValue: typeof HasSingleEmptyValue;
    getOccurrence: typeof getOccurrence;
    hasOneItem: typeof hasOneItem;
    hasItemsOfCount: typeof hasItemsOfCount;
    moveArray: typeof moveArray;
    areArraysEqual: typeof areArraysEqual;
    areArraysNotEqual: typeof areArraysNotEqual;
    areArraysEqualWithOrder: typeof areArraysEqualWithOrder;
    areArraysEqualWithOrderAndProperties: typeof areArraysEqualWithOrderAndProperties;
    areArraysEqualWithCustomComparator: typeof areArraysEqualWithCustomComparator;
    sortArray: typeof sortArray;
    sortCellValueArray: typeof sortCellValueArray;
    sortCellValueArrayNumeric: typeof sortCellValueArrayNumeric;
    sortCellValueArrayDates: typeof sortCellValueArrayDates;
    sortArrayWithProperty: typeof sortArrayWithProperty;
    createCommaSeparatedString: typeof createCommaSeparatedString;
    SumArray: typeof SumArray;
    reorderArray: typeof reorderArray;
    sortArrayWithOrder: typeof sortArrayWithOrder;
    chunk: typeof chunk;
    flatten: typeof flatten;
    flattenDeep: typeof flattenDeep;
    uniq: typeof uniq;
    isArray: (value: any) => value is any[];
};
export default ArrayExtensions;
