import { AfterContentInit, AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, TemplateRef } from '@angular/core';
import { EuiTemplateDirective } from '@eui/components/directives';
import { EuiPaginatorComponent } from '@eui/components/eui-paginator';
import { EuiTableFilterComponent } from './filter/eui-table-filter.component';
import { SortEvent } from './models/sort-event.model';
import { MultisortParam } from './models/multi-sort.model';
import * as i0 from "@angular/core";
import * as i1 from "@eui/components/shared";
/**
 * @description
 * The `eui-table` component has been built to offer various requested features including fast performance and excellent level of control over tabular presentation of data.
 *
 * The eui-table is quite simple of usage and requires :
 *     - rows : the data value input as an array of objects, usually fetched from a service (data payload),
 *     - view : this is the template for the presentation with its various options such as the search filter, the paginator, sortable columns, etc.
 *
 */
export declare class EuiTableComponent implements AfterContentInit, OnInit, OnDestroy, AfterViewInit, OnChanges {
    /**
     * @description
     * Computes and returns the CSS classes for the component based on its current state.
     *
     * @returns {string} Space-separated string of CSS class names
     */
    get cssClasses(): string;
    /**
     * Data to display in the table.
     */
    rows: any[];
    /**
     * Unicity criteria of the data.
     *
     * @default 'id'
     */
    propId: string;
    /**
     * e2e attribute.
     *
     * @default 'eui-table'
     */
    e2eAttr: string;
    /**
     * `eui-paginator` reference passed to the table.
     *
     * @type {EuiPaginatorComponent}
     */
    paginator: EuiPaginatorComponent;
    /**
     * `eui-table-filter` reference passed to the table.
     *
     * @type {EuiTableFilterComponent}
     */
    filter: EuiTableFilterComponent;
    /**
     * In combination with `isDataSelectable`. Rows to be selected by default.
     */
    preselectedRows: any[];
    /**
     * Whether a loading spinner is displayed in the table.
     *
     * @default false
     */
    loading: boolean;
    /**
     * Whether the table uses async data.
     * In this configuration, the backend manages pagination, filtering, and sorting.
     *
     * When data are async, paginator and filter must not be bound to the eui-table component like in another sample.
     *
     * @default false
     */
    asyncTable: boolean;
    /**
     * @deprecated
     * Not used anymore. Will be removed in the next major version.
     */
    paginable: boolean;
    /**
     * Whether the table is responsive.
     *
     * @default false
     */
    euiTableResponsive: boolean;
    euiTableFixedLayout: boolean;
    /**
     * Whether the table has draggable rows.
     *
     * @default false
     */
    euiTableDraggable: boolean;
    euiTableCards: boolean;
    /**
     * @deprecated
     * Has been deprecated to align with Design System
     */
    euiTableBordered: boolean;
    /**
     * Whether the table use compact design.
     *
     * @default false
     */
    euiTableCompact: boolean;
    /**
     * Whether the table header is sticky.
     * To use the eui-table sticky feature and control the scrolling overflow,
     * we recommend wrapping the table with the provided eui-table-v2__scrollable-wrapper class and set your custom table width and/or height.
     *
     * @default false
     */
    hasStickyHeader: boolean;
    /**
     * Whether the table col is sticky.
     * To use the eui-table sticky feature and control the scrolling overflow,
     * we recommend wrapping the table with the provided eui-table-v2__scrollable-wrapper class and set your custom table width and/or height.
     *
     * Only the first or latest columns can be sticky.
     *
     * @default false
     */
    hasStickyColumns: boolean;
    /**
     * Whether the 'select all' checkbox in the header will select ONLY items in the current page.
     *
     * If `false`, all items across the pages will be selected.
     *
     * @default false
     */
    isSelectOnlyVisibleRows: boolean;
    /**
     * Whether the cols can be reordered.
     *
     * @default false
     */
    isColsOrderable: boolean;
    /**
     * Whether the cells have a hover effect.
     *
     * @default false
     */
    isHoverable: boolean;
    /**
     * In combination with `isSelectable` on a row. Event emitted when the selection changes with an array of data.
     */
    selectedRows: EventEmitter<any[]>;
    /**
     * In combination with `sortable` on the cols. Event emitted when the sort changes with the property displayed in the col and the order as `ASC` or `DESC`.
     */
    sortChange: EventEmitter<SortEvent>;
    /**
     * In combination with `sortable` & `isMultiSortable` on the cols. Event emitted when the sort changes with the property displayed in the col and the order as `ASC` or `DESC`.
     */
    multiSortChange: EventEmitter<MultisortParam[]>;
    headerTemplate: TemplateRef<any>;
    bodyTemplate: TemplateRef<any>;
    footerTemplate: TemplateRef<any>;
    emptyMessageTemplate: TemplateRef<any>;
    captionTemplate: TemplateRef<any>;
    rowsRendered: any[];
    page: number;
    pageSize: number;
    showStickyHeader: boolean;
    filteredRows: any[];
    templates: QueryList<EuiTemplateDirective>;
    theadRef: ElementRef<HTMLElement>;
    tbodyRef: ElementRef<HTMLElement>;
    tfootRef: ElementRef<HTMLElement>;
    private rowsSrc;
    private destroy$;
    private tableFeaturesHandlerSubscription;
    private selectRowsFeatureHandlerSubscription;
    private stickyFeatureHandlerIndex;
    private euiTableSortService;
    private cd;
    private euiTableSelectableRowService;
    private elementRef;
    private baseStatesDirective;
    ngOnChanges(c: SimpleChanges): void;
    ngOnInit(): void;
    ngAfterContentInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /**
     * Select all rows
     */
    selectAllRows(): void;
    /**
     * Unselect all rows
     */
    unselectAllRows(): void;
    /**
     * Selects a set of rows.
     *
     * @param rows Rows to select.
     */
    selectRows(rows: any[]): void;
    /**
     * Filters the table's data based on a string declared in `EuiTableFilterComponent`
     *
     * @param filter String to filter the data
     * @param r Array of data to filter
     * @returns The set of data matching the filter
     */
    filterRows(filter: string, r: any[]): any[];
    /**
     * Sort the table's data.
     *
     * @param sort The sort property and order.
     */
    setSort(sort: string | null, order: 'asc' | 'desc' | null): void;
    /**
     * Calcultates the position of columns that are sticky.
     */
    private stickyFeatureHandler;
    /**
     * Handles table features such as sorting, filtering, and pagination before rendering.
     */
    private tableFeaturesHandler;
    /**
     * Handles multi-sorting
     *
     * @param multisortParams Multi-sorting criterias
     * @param r Data to sort
     * @returns An array of data sorted
     */
    private doMultiSort;
    private multiSortRows;
    private isColumnSortable;
    private sortTwoRowsDesc;
    /**
     * This function is to do the sorting the table with the combination of 0,null and text in ascending order.
     * getObjPropValue is to get the object property value
     *
     * @param a First row to sort
     * @param b Second row to sort
     * @param colName Sort criteria
     * @returns Result of the sorting
     */
    private sortTwoRowsAsc;
    private getObjPropValue;
    /**
     * Handles the selection of rows.
     */
    private selectRowsFeatureHandler;
    /**
     * Get the properties of the object matching the filter string.
     *
     * @param obj Obj to extract the property from.
     * @param filter String to search in the properties.
     * @returns An array of properties matching the filter.
     */
    private getProps;
    /**
     * Slices the data array based on the pagination event.
     *
     * @param pagination Object containing the page, the page size, and the total number of pages.
     * @param r Array of data to paginate.
     * @returns The sliced array to render.
     */
    private paginateRows;
    /**
     * Get a property of an object based on the path.
     *
     * @param obj Row to extract the property from.
     * @param prop Path of the property to extract.
     * @returns The value of the property
     */
    private getObjProp;
    static ɵfac: i0.ɵɵFactoryDeclaration<EuiTableComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EuiTableComponent, "eui-table, table[euiTable]", never, { "rows": { "alias": "rows"; "required": false; }; "propId": { "alias": "propId"; "required": false; }; "e2eAttr": { "alias": "e2eAttr"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "preselectedRows": { "alias": "preselectedRows"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "asyncTable": { "alias": "asyncTable"; "required": false; }; "paginable": { "alias": "paginable"; "required": false; }; "euiTableResponsive": { "alias": "euiTableResponsive"; "required": false; }; "euiTableFixedLayout": { "alias": "euiTableFixedLayout"; "required": false; }; "euiTableDraggable": { "alias": "euiTableDraggable"; "required": false; }; "euiTableCards": { "alias": "euiTableCards"; "required": false; }; "euiTableBordered": { "alias": "euiTableBordered"; "required": false; }; "euiTableCompact": { "alias": "euiTableCompact"; "required": false; }; "hasStickyHeader": { "alias": "hasStickyHeader"; "required": false; }; "hasStickyColumns": { "alias": "hasStickyColumns"; "required": false; }; "isSelectOnlyVisibleRows": { "alias": "isSelectOnlyVisibleRows"; "required": false; }; "isColsOrderable": { "alias": "isColsOrderable"; "required": false; }; "isHoverable": { "alias": "isHoverable"; "required": false; }; }, { "selectedRows": "selectedRows"; "sortChange": "sortChange"; "multiSortChange": "multiSortChange"; }, ["templates"], never, true, [{ directive: typeof i1.BaseStatesDirective; inputs: {}; outputs: {}; }]>;
    static ngAcceptInputType_loading: unknown;
    static ngAcceptInputType_asyncTable: unknown;
    static ngAcceptInputType_paginable: unknown;
    static ngAcceptInputType_euiTableResponsive: unknown;
    static ngAcceptInputType_euiTableFixedLayout: unknown;
    static ngAcceptInputType_euiTableDraggable: unknown;
    static ngAcceptInputType_euiTableCards: unknown;
    static ngAcceptInputType_euiTableBordered: unknown;
    static ngAcceptInputType_euiTableCompact: unknown;
    static ngAcceptInputType_hasStickyHeader: unknown;
    static ngAcceptInputType_hasStickyColumns: unknown;
    static ngAcceptInputType_isSelectOnlyVisibleRows: unknown;
    static ngAcceptInputType_isColsOrderable: unknown;
    static ngAcceptInputType_isHoverable: unknown;
}
//# sourceMappingURL=eui-table.component.d.ts.map