import { default as Filter } from '../modules/Filter/Filter';
import { default as Page } from '../modules/Page/Page';
import { default as SelectRow } from '../modules/SelectRow/SelectRow';
import { default as Tabulator } from './Tabulator';
import { GroupArg, GroupValuesArg, ITabulatorFull, Options, SheetLookup, SortDirection, Sorter, SpreadsheetComponent } from './types';

declare class TabulatorFull extends Tabulator implements ITabulatorFull {
    static extendModule(...args: Parameters<typeof Tabulator._extendModule>): void;
    static registerModule(...args: Parameters<typeof Tabulator._registerModule>): void;
    constructor(element: string | HTMLElement, options?: Partial<Options>);
    setSheetData: (lookup: string | SpreadsheetComponent, data: unknown[][]) => void;
    /**
     * You can use the setGroupBy function to change the fields that rows are grouped by. This function has one argument and takes the same values as passed to the groupBy setup option.
     */
    setGroupBy: (groups: GroupArg) => void;
    /**
     * You can use the setGroupHeader function to change the header generation function for each group. This function has one argument and takes the same values as passed to the groupHeader setup option.
     */
    setGroupHeader: (values: Options['groupHeader']) => void;
    /**
     * You can use the setGroupStartOpen function to change the default open state of groups. This function has one argument and takes the same values as passed to the groupStartOpen setup option.
     * Note: If you use the setGroupStartOpen or setGroupHeader before you have set any groups on the table, the table will not update until the setGroupBy function is called.
     */
    setGroupLoadMoreMeta: (meta: Options['groupLoadMoreMeta']) => void;
    setGroupStartOpen: (values: Options['groupStartOpen']) => void;
    setGroupValues: (data: GroupValuesArg) => void;
    /**
     * You can change the page size at any point by using the setPageSize function. (this setting will be ignored if using remote pagination with the page size set by the server)
     */
    setPageSize: (size: number | true) => void;
    /**
     * When pagination is enabled the table footer will contain a number of pagination controls for navigating through the data.
     *
     * In addition to these controls it is possible to change page using the setPage function
     * The setPage function takes one parameter, which should be an integer representing the page you wish to see. There are also four strings that you can pass into the parameter for special functions.
     *
     * - "first" - show the first page
     * - "prev" - show the previous page
     * - "next" - show the next page
     * - "last" - show the last page
     * The setPage method returns a promise, this can be used to run any other commands that have to be run after the data has been loaded into the table. By running them in the promise you ensure they are only run after the table has loaded the data.
     */
    setPage: (page: number | 'first' | 'prev' | 'next' | 'last') => Promise<void>;
    getSheetData: (key?: SheetLookup) => unknown[][];
    getPage: () => Page;
    setFilter: Filter['setFilter'];
    createFilterFieldFunction: Filter['createFilterFieldFunction'];
    clearFilter: Filter['clearFilter'];
    selectRow: SelectRow['selectRows'];
    deselectRow: SelectRow['deselectRows'];
    toggleSelectRow: SelectRow['toggleRow'];
    setSort: (sortList: string | Sorter[], dir?: SortDirection) => void;
}
export default TabulatorFull;
