import { ILogger } from '@aurelia/kernel';
import { SortOption } from './sorting-options.js';
/**
 * Handles the data part of the grid.
 * This has very little to do with the presentation of the data.
 */
export declare class ContentModel<T> {
    readonly onSorting: ApplySorting<T> | null;
    readonly isAnySelected: boolean;
    readonly isOneSelected: boolean;
    readonly selectionCount: number;
    allItems: T[] | null;
    readonly selectedItems: T[];
    readonly selectionMode: ItemSelectionMode;
    private readonly onSelectionChange;
    private readonly pageSize;
    private readonly fetchPage;
    private readonly fetchCount;
    private readonly logger;
    private _currentPage;
    private _currentPageNumber;
    private pagePromise;
    private countPromise;
    private _totalCount;
    private _sortOptions;
    private _pageCount;
    private initialized;
    constructor(allItems: T[] | null, pagingOptions: Partial<PagingOptions<T>> | null, selectionOptions: Partial<SelectionOptions<T>> | null, onSorting: ApplySorting<T> | null, logger: ILogger);
    get currentPage(): T[];
    get totalCount(): number;
    get pageCount(): number;
    get currentPageNumber(): number;
    selectItem(item: T): void;
    selectRange(startIndex: number, endIndex: number): void;
    toggleSelection(item: T): void;
    private handleSelectionChange;
    clearSelections(): void;
    isSelected(item: T): boolean;
    applySorting(...sortOptions: SortOption<T>[]): void;
    goToPage(pageNumber: number, force?: boolean): void;
    goToPreviousPage(): void;
    goToNextPage(): void;
    /** @internal */
    setTotalCount(): void;
    /** @internal */
    setPage(): void;
    wait(rethrowError?: boolean): Promise<void>;
    refresh(rethrowError?: boolean): Promise<void>;
    private allItemsChanged;
}
export declare enum ItemSelectionMode {
    None = 0,
    Single = 1,
    Multiple = 2
}
type SelectionChangeHandler<T> = (selectedItems: T[], isOneSelected: boolean, isAnySelected: boolean) => void;
export interface SelectionOptions<T> {
    mode: ItemSelectionMode;
    onSelectionChange: SelectionChangeHandler<T>;
}
export type FetchCount<T> = (model: ContentModel<T>) => number | Promise<number>;
export type FetchPage<T> = (currentPage: number, pageSize: number, model: ContentModel<T>) => T[] | Promise<T[]>;
export interface PagingOptions<T> {
    pageSize: number | null;
    fetchPage: FetchPage<T>;
    fetchCount: FetchCount<T>;
}
export type ApplySorting<T> = (newValue: SortOption<T>[], oldValue: SortOption<T>[], allItems: T[] | null, model: ContentModel<T>) => void;
export {};
//# sourceMappingURL=content-model.d.ts.map