import { AfterViewInit, ChangeDetectorRef, ComponentFactoryResolver, ElementRef, EventEmitter, OnChanges, QueryList, ViewContainerRef } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { IResultList } from '@c8y/client';
import { BehaviorSubject } from 'rxjs';
import { LoadMoreComponent } from '../common/load-more.component';
import { LoadMoreMode } from '../common/load-more.model';
import { CellRendererSpec } from './column/cell-renderer';
import { ColumnDirective } from './column/column.directive';
import { FilteringFormRendererSpec, FilteringModifier } from './column/filtering-form-renderer';
import { ActionControl, BuiltInActionType, BulkActionControl, Column, DataGrid, DisplayOptions, FilteringActionType, Pagination, Row, ServerSideDataCallback, SortOrder, GridConfig, HeaderActionControl } from './data-grid.model';
import { GridDataSource } from './grid-data-source';
export declare class DataGridComponent implements DataGrid, OnChanges, AfterViewInit {
    private sanitizer;
    private hostRef;
    private cd;
    private cfr;
    /** The title for the data grid, it's displayed in the grid's header. */
    title: string;
    /** The label for load more button. */
    loadMoreItemsLabel: string;
    /** The label for loading indicator. */
    loadingItemsLabel: string;
    /** Determines whether text search input is shown in the grid's header. */
    showSearch: boolean;
    /** Takes an event emitter. When an event is emitted, the grid will be reloaded. */
    refresh: EventEmitter<any>;
    columns: Column[];
    /** The list of columns to be displayed in the grid. */
    set _columns(columns: Column[]);
    dataSource: GridDataSource;
    rows: Row[];
    /** The list of rows to be displayed in the grid (used for client side data). */
    set _rows(rows: Row[]);
    filteringLabelsParams: {
        filteredItemsCount: number;
        allItemsCount: number;
    };
    pagination: Pagination;
    paginationLabelParams: {
        pageFirstItemIdx: number;
        pageLastItemIdx: number;
        itemsTotal: number;
    };
    readonly possiblePageSizes: number[];
    readonly minPossiblePageSize: number;
    /** Pagination settings, e.g. allows for setting current page or page size. */
    set _pagination(pagination: Pagination);
    infiniteScroll: LoadMoreMode;
    /** Sets load more mode. */
    set _infiniteScroll(infiniteScroll: LoadMoreMode);
    serverSideDataCallback: ServerSideDataCallback;
    /**
     * Sets a callback function which will be invoked whenever data needs to be loaded from server.
     * The function should take [[DataSourceModifier]] and return [[ServerSideDataResult]].
     */
    set _serverSideDataCallback(serverSideDataCallback: ServerSideDataCallback);
    selectable: boolean;
    /** Determines whether items can be selected by clicking a checkbox in the first column. */
    set _selectable(selectable: boolean);
    selectionPrimaryKey: string;
    /** Determines which item's property will be used to distinguish selection status. */
    set _selectionPrimaryKey(selectionPrimaryKey: string);
    displayOptions: DisplayOptions;
    /** Sets display options. */
    set _displayOptions(displayOptions: DisplayOptions);
    actionControls: ActionControl[];
    /** Sets action controls (actions available for individual items). */
    set _actionControls(actionControls: ActionControl[]);
    bulkActionControls: BulkActionControl[];
    /** Sets bulk action controls (actions available for items selected by user). */
    set _bulkActionControls(bulkActionControls: BulkActionControl[]);
    headerActionControls: HeaderActionControl[];
    /** Sets header action controls (actions available from data grid header). */
    set _headerActionControls(headerActionControls: HeaderActionControl[]);
    /** Sets initial search text. */
    searchText: string;
    /** Emits an event when mouse is over a row. */
    rowMouseOver: EventEmitter<object>;
    /** Emits an event when mouse leaves a row. */
    rowMouseLeave: EventEmitter<object>;
    /** Emits an event when a row is clicked. */
    rowClick: EventEmitter<object>;
    /** Emits an event when grid's configuration is changed. */
    onConfigChange: EventEmitter<GridConfig>;
    /** Emits an event when a filter is applied in a column. */
    onFilter: EventEmitter<object>;
    /** Emits an event when items selection changes. The array contains keys of selected items (key property is defined by `selectionPrimaryKey`). */
    itemsSelect: EventEmitter<string[]>;
    /** Emits an event when reload button is clicked. */
    onReload: EventEmitter<any>;
    columnRenderers: QueryList<ColumnDirective>;
    scrollContainer: ElementRef;
    infiniteScrollContainer: ViewContainerRef;
    loadMoreComponent: LoadMoreComponent;
    columnNames: any[];
    styles: {
        tableCursor: string;
        gridTemplateColumns: any;
        gridInfiniteScrollColumn: any;
    };
    searchText$: EventEmitter<string>;
    filteringApplied: boolean;
    totalPagesCount$: BehaviorSubject<number>;
    hidePagination$: import("rxjs").Observable<boolean>;
    selectedItemIds: string[];
    currentPageSelectionState: {
        allSelected: boolean;
        allDeselected: boolean;
    };
    builtInActionType: {
        Edit: BuiltInActionType;
        Delete: BuiltInActionType;
        Export: BuiltInActionType;
    };
    resizeHandleMouseDown$: EventEmitter<any>;
    resizeHandleContainerMouseMove$: EventEmitter<any>;
    resizeHandleContainerMouseUp$: EventEmitter<any>;
    private headerBeingResized;
    private thRefs;
    private thEls;
    private recreateLoadMoreComponent;
    private unsubscribe$;
    /**
     * Event emitter used for loading data grid data with debounce.
     * This is used to avoid having multiple this.loadData() function calls.
     */
    private triggerLoadData;
    constructor(sanitizer: DomSanitizer, hostRef: ElementRef, cd: ChangeDetectorRef, cfr: ComponentFactoryResolver);
    ngOnInit(): void;
    ngOnChanges(event: any): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    trackByName(index: any, item: any): any;
    resolveCellValue(row: any, path: any): any;
    changeSortOrder(columnName: any): void;
    updateSorting(columnNames: string[], sortOrder: SortOrder): void;
    applyFilter(columnName: any, dropdown: any, filteringModifier: any): void;
    resetFilter(columnName: any, dropdown: any): void;
    clearFilters(): void;
    updateFiltering(columnNames: string[], action: {
        type: FilteringActionType;
        payload?: {
            filteringModifier: FilteringModifier;
        };
    }, reload?: boolean): void;
    updateFilteringApplied(): void;
    isColumnFilteringApplied(column: Column): boolean;
    updatePagination({ itemsPerPage, page }: {
        itemsPerPage: any;
        page: any;
    }): void;
    clickReload(): void;
    reload(): void;
    loadNextPage(): Promise<IResultList<object>>;
    getCellRendererSpec({ value, row, columnName }: {
        value: any;
        row: any;
        columnName: any;
    }): CellRendererSpec;
    getHeaderCellRendererSpec({ value, columnName }: {
        value: any;
        columnName: any;
    }): CellRendererSpec;
    getFilteringFormRendererSpec({ column, dropdown }: {
        column: any;
        dropdown: any;
    }): FilteringFormRendererSpec;
    setAllItemsSelected(selected: any): void;
    setAllItemsInCurrentPageSelected(selected: any): void;
    setItemsSelected(items: any[], selected: any): void;
    cancel(): void;
    isItemSelected(item: any): boolean;
    onColumnDrop({ previousIndex, currentIndex }: {
        previousIndex: any;
        currentIndex: any;
    }): void;
    updateGridColumnsSize(): void;
    private loadData;
    private emitConfigChange;
    private updateColumns;
    private withColumnDefaults;
    private updateColumnNames;
    private setupResizeHandle;
    private clearMouseHighlights;
    private _getCellRendererSpec;
    private getColumnRenderer;
    private updateFilteringLabelsParams;
    private updatePaginationLabelParams;
    private createLoadMoreComponent;
    private scrollToTop;
}
