import { EventEmitter, QueryList, ElementRef, OnInit, AfterContentInit, Renderer2, AfterViewInit, OnDestroy, NgZone, ChangeDetectorRef } from '@angular/core';
import { TableHeaderItemComponent } from './table-th';
/** table order type */
export declare type OrderType = 'asc' | 'desc' | '';
/**
 * html element position
 * @docs-private
 */
export interface ElementPosition {
    left: number;
    top: number;
}
/** table sort param interface */
export interface SortParam {
    /** sort field */
    orderBy: string;
    /** sort type */
    order: OrderType;
}
/**
 * sort function
 *
 * @param {string} order - order type
 * @param {string} orderBy - order field
 */
export declare function sortFunc(order: string, orderBy: string): (x: any, y: any) => number;
/**
 * Table Component
 */
export declare class TableComponent implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {
    private _el;
    private _render;
    private _ngZone;
    private _cd;
    /** table sort event emitter, emit a `SortParam` Object with the `order` and `orderBy` property. */
    sort: EventEmitter<SortParam>;
    dataChange: EventEmitter<any[]>;
    /**
     * table datasource
     * @default []
     */
    datasource: any[];
    datasourceChange: EventEmitter<any[]>;
    /**
     * inner filterd datasource
     * @docs-private
     */
    data: any[];
    /**
     * whether the table is bordered
     * @default false
     */
    bordered: boolean;
    /**
     * table order state, can be 'asc' or 'desc' or ''
     */
    order: OrderType;
    /**
     * table order state change event listener
     * @docs-private
     */
    orderChange: EventEmitter<string>;
    /**
     * table orderby field
     */
    orderBy: string;
    /**
     * table orderby field change event listener
     * @docs-private
     */
    orderByChange: EventEmitter<string>;
    /** table current page */
    page: number;
    /**
     * table page change event listener
     * @docs-private
     */
    pageChange: EventEmitter<number>;
    /** table pageSize */
    pageSize: number;
    /**
     * table pageSize change event listener
     * @docs-private
     */
    pageSizeChange: EventEmitter<number>;
    /**
     * Whether the table columns can be resizable
     * @default false
     */
    resizable: boolean;
    /**
     * the table extra theme, i.e. when theme is 'small', an extra class `nb-table-small`
     * will be appended to the host className property
     * @default ''
     */
    theme: string;
    /**
     * Whether the table data is loading
     */
    loading: boolean;
    /**
     * table head item children
     * @docs-private
     */
    _headItems: QueryList<TableHeaderItemComponent>;
    /**
     * resize indicator line
     * @docs-private
     */
    _resizeLine: ElementRef;
    /**
     * cache table position
     */
    _tablePos: ElementPosition;
    /**
     * current resize column index when resizing table columns
     */
    _columnIndex: number;
    /**
     * current resize column start position when resizing table columns
     */
    _startPos: number;
    /**
     * whether the table is resizing column
     */
    _isDragging: boolean;
    /**
     * the distance when resizing column, if < 0, then the current column width will decrease _dx
     * and the next sibling column width will increase _dx
     */
    _distance: number;
    _mouseMoveListener: Function | null;
    constructor(_el: ElementRef, _render: Renderer2, _ngZone: NgZone, _cd: ChangeDetectorRef);
    startColumnResizing(): void;
    bindMouseEvents(): void;
    unbindMouseEvents(): void;
    /**
     * listen sort related param change
     * @docs-private
     */
    listenSortParamChange(): void;
    listenDatasourceChange(): void;
    ngOnInit(): void;
    getDisplayData(): any[];
    ngAfterContentInit(): void;
    /**
     * get table native elment position(left && top)
     * @docs-private
     */
    getTablePosition(): ElementPosition;
    /**
     * set column resize start position
     * @param {number} left - left position relative to the table
     * @param {number} columnIndex - currently resize column
     * @docs-private
     */
    setColumeResizeStartPosition(left: number, columnIndex: number): void;
    /**
     * update resize indicator line
     * @param {number} left - the left position of indicator line relative to the table
     * @docs-private
     */
    updateResizeLinePosition(left: number): void;
    /**
     * table mousemove event, update resize indicator line position
     * @param {MouseEvent} event - mouse event
     * @docs-private
     */
    onMouseMove(event: MouseEvent): boolean;
    /**
     * talbe mouseup event, when not resize column, do nothing
     * when resize column, update column width and set resizing flag to false
     * @docs-private
     */
    onMouseUp(): void;
    /**
     * get origin column width array
     * @return {number[]} column width array
     * @docs-private
     */
    getOriginHeadItemWidth(): number[];
    /**
     * when column resize is done, update table head item width
     * @docs-private
     */
    updateTableHeadItemWidth(): void;
    /**
     * when column resize is done, compute the new column width array
     * @docs-private
     */
    getNewColumnWidth(): number[];
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
}
