import { Column, ObjectWithType, Table } from '../../index';
/**
 * If present on a table, allows adding, removing or modifying columns. If the table is customizable,
 * those functions are delegated to the table customizer. Otherwise, adding or removing a column
 * changes its `visible` flag, while modifying is currently not supported.
 *
 * Use {@link install} to attach the table organizer to a table. This happens automatically when
 * the table organizer is defined on the {@link Table}.
 *
 * @see Table.organizer
 * @see TableHeaderMenu._renderColumnActionsGroup
 * @see ShowInvisibleColumnsForm
 */
export declare class TableOrganizer implements ObjectWithType {
    objectType: string;
    table: Table;
    constructor();
    /**
     * Passes the given table to the organizer.
     * If the organizer is already installed, an error is thrown.
     * In most cases, it is not necessary to call this method manually. Consider using {@link Table.setOrganizer} instead.
     */
    install(table: Table): void;
    /**
     * Removes the table from the organizer.
     * If the organizer is not installed, nothing happens.
     * In most cases, it is not necessary to call this method manually. Consider using {@link Table.setOrganizer} instead.
     */
    uninstall(): void;
    /**
     * Returns a list of all currently invisible but displayable columns that can be added to the list of
     * visible columns by the table organizer.
     */
    getInvisibleColumns(): Column<any>[];
    /**
     * Adds the given columns to the list of visible columns. If `insertAfterColumn` is set, the columns are
     * also moved after the specified column. Otherwise, they remain at their current position.
     */
    showColumns<T>(columns: Column<any>[], insertAfterColumn?: Column<any>): void;
    protected _moveColumns(columns: Column<any>[], insertAfterColumn: Column<any>): void;
    /**
     * Hides the given columns. If it was grouped, the grouping is removed. If it was part of a filter, the filter is removed.
     */
    hideColumns(columns: Column<any>[]): void;
    /**
     * Moves the columns to their new position according to the indices in the given `visibleColumns` array.
     */
    moveColumns(visibleColumns: Column<any>[]): void;
    /**
     * Returns true if there are addable columns according to {@link getInvisibleColumns}.
     */
    isColumnAddable(): boolean;
    addColumn(column?: Column<any>): Promise<void>;
    /**
     * Returns true if the given column can be removed form the table.
     *
     * @param allowRemovalOfLastColumn true, to allow the removal of the last visible column. Default is false.
     */
    isColumnRemovable(column: Column<any>, allowRemovalOfLastColumn?: boolean): boolean;
    removeColumns(columns: Column<any>[]): void;
    /**
     * Returns true if the given column can be modified.
     */
    isColumnModifiable(column: Column<any>): boolean;
    modifyColumn(column: Column<any>): Promise<void>;
    /**
     * @returns true if the column can be moved to the left.
     *          It cannot be moved if the column is invisible, the column is already at the beginning or if left of the column is a fixed position column.
     */
    isColumnMovableToLeft(column: Column<any>): boolean;
    /**
     * @returns true if the column can be moved to the right.
     *          It cannot be moved if the column is invisible, the column is already at the end or if right of the column is a fixed position column.
     */
    isColumnMovableToRight(column: Column<any>): boolean;
    protected _showInvisibleColumnsForm(insertAfterColumn?: Column<any>): Promise<void>;
}
//# sourceMappingURL=TableOrganizer.d.ts.map