import { BasePlugin } from '../base.plugin';
import type { ColumnRegular, DimensionRows, PluginProviders } from "../../types/index";
import type { SortingConfig, SortingOrder, SortingOrderFunction } from './sorting.types';
export * from './sorting.types';
export * from './sorting.func';
export * from './sorting.sign';
/**
 * Lifecycle
 * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
 * 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.
 * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.
 * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
 *
 * Note: If you prevent an event, it will not proceed to the subsequent steps.
 */
export declare class SortingPlugin extends BasePlugin {
    revogrid: HTMLRevoGridElement;
    sorting?: SortingOrder;
    sortingFunc?: SortingOrderFunction;
    /**
     * Delayed sorting promise
     */
    sortingPromise: (() => void) | null;
    /**
     * We need to sort only so often
     */
    postponeSort: import("lodash").DebouncedFunc<(order?: SortingOrder, comparison?: SortingOrderFunction, ignoreViewportUpdate?: boolean) => void>;
    constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders, config?: SortingConfig);
    /**
     * Entry point for sorting, waits for all delays, registers jobs
     */
    startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction, ignoreViewportUpdate?: boolean): void;
    /**
     * Apply sorting to data on header click
     * If additive - add to existing sorting, multiple columns can be sorted
     */
    headerclick(column: ColumnRegular, additive: boolean): void;
    runSorting(order?: SortingOrder, comparison?: SortingOrderFunction, ignoreViewportUpdate?: boolean): void;
    /**
     * Sort items by sorting function
     * @requires proxyItems applied to row store
     * @requires source applied to row store
     *
     * @param sorting - per column sorting
     * @param data - this.stores['rgRow'].store.get('source')
     */
    sort(sorting?: SortingOrder, sortingFunc?: SortingOrderFunction, types?: DimensionRows[], ignoreViewportUpdate?: boolean): void;
}
