import { Sort, SortMode, SortOrder } from '../model';
import { TypedEmitter } from '../util';
export interface SortStateParams {
}
export interface Sortable {
    id: string;
    sortMode?: SortMode;
}
export declare class SortState {
    readonly _value: import("mobx").IObservableArray<Sort>;
    readonly events: TypedEmitter<{
        change: (params?: {
            col?: Sortable;
        }) => unknown;
    }>;
    constructor(_params: SortStateParams);
    reset({ emitChangeEvent }?: {
        emitChangeEvent?: boolean;
    }): void;
    _getNextSortOrder(col: Sortable): SortOrder | undefined;
    setSort(col: Sortable, { forceDirection, emitChangeEvent, multiple, }?: {
        forceDirection?: SortOrder;
        emitChangeEvent?: boolean;
        multiple?: boolean;
    }): void;
    _setSortSingular(col: Sortable, direction?: SortOrder): void;
    /**
     * Rules
     * Sort by a new column:
     * - Clear all previous sorts and add a new one
     * Sort by an existing column:
     * - If only 1 column is sorted, the next direction is calculated
     *   with the SortMode in mind (if provided).
     * - If more than 1 column is sorted, only change the direction
     *   asc -> desc, desc -> asc, ignoring the SortMode (if provided).
     */
    _setSortMultiple(col: Sortable, direction?: SortOrder): void;
    setSortQuery(query: Sort[], { emitChangeEvent }?: {
        emitChangeEvent?: boolean;
    }): void;
    changeSort(col: Sortable, params?: {
        multiple?: boolean;
        forceDirection?: SortOrder;
    }): void;
    get value(): import("mobx").IObservableArray<Sort>;
    getIsSortDescending(id: string): boolean | undefined;
}
//# sourceMappingURL=SortState.d.ts.map