import { EventEmitter } from '../../stencil.core';
import { IntlFormatFn } from '../locale/i18n.provider';
import { ColumnConfiguration, ColumnDefinition, RowData, TableRenderer } from './table.types';
export declare class Table {
    private cellMouseOverListener;
    private cellMouseOutListener;
    private cellRenderers;
    private filter;
    private filtering;
    private rowGroupControl;
    private id;
    private inited;
    private offsets;
    private pager;
    private pinBoundaries;
    private rowRenderers;
    private scroller;
    private source;
    private spinner;
    private store;
    private get pagerOptions();
    private set pagerOptions(value);
    element: HTMLAnjTableElement;
    colDefs: ColumnDefinition[];
    rows: RowData[];
    /**
     * Row the user is engaged with
     */
    activeRowIndex: number;
    /**
     * Array of data objects to render
     */
    columns: ColumnConfiguration[];
    onColumnsChange(): Promise<void>;
    /**
     * Sets the width of all columns.
     * Options are `"auto"`, `"auto-fix"`, or a number representing the number of pixels. Default is auto.
     */
    columnWidth: 'auto' | 'auto-fix' | string;
    /**
     * The data source for row data
     */
    dataSource: any;
    onDataSourceChange(): Promise<void>;
    /**
     * Default formatter to use for dates
     */
    dateFormatter: IntlFormatFn;
    /**
     * Default formatter to use for dates
     */
    datetimeFormatter: IntlFormatFn;
    /**
     * Height of the table
     */
    height: string;
    /**
     * Highlight on hover
     * Possible values are: `"rows"`, `"columns"`, and `"none"`. Default is "rows"
     */
    highlight?: 'cells' | 'columns' | 'none' | 'rows';
    /**
     * Implicitly set the columns based on the records
     */
    implicitColumns: boolean;
    /**
     * A unique identifier for the table
     */
    name: string;
    /**
     * Default formatter to use for numbers
     */
    numberFormatter: IntlFormatFn;
    /**
     * Is the table re-orderable by users
     */
    orderable: boolean;
    /** @internal */
    renderer: TableRenderer;
    /**
     * The property for row objects to be treated as a unique key
     */
    rowKey: number | string;
    /**
     * Columns that have been selected by field name
     */
    selectedColumnFields: string[];
    /**
     * Row keys that have been selected
     */
    selectedRowKeys: (number | string)[];
    /**
     * Is the table re-sizable by users
     */
    sizable: boolean;
    /**
     * @internal
     */
    translator: IntlFormatFn;
    /**
     * Emitted when the columns have loaded.
     */
    anjColumnsDidLoad: EventEmitter<ColumnDefinition[]>;
    /**
     * Emitted when the columns have updated.
     */
    anjColumnsDidUpdate: EventEmitter<ColumnDefinition[]>;
    /**
     * Emitted when before kicking off a load from the data source.
     */
    anjRowsWillLoad: EventEmitter<void>;
    /**
     * Emitted after the data source completes a load.
     */
    anjRowsDidLoad: EventEmitter<void>;
    /**
     * Emitted when the table will update.
     */
    anjTableWillUpdate: EventEmitter<void>;
    /**
     * Emitted when the table has updated.
     */
    anjTableDidUpdate: EventEmitter<void>;
    componentDidLoad(): Promise<void>;
    componentWillUpdate(): void;
    componentDidUpdate(): void;
    componentDidUnload(): void;
    onControlLoaded(event: CustomEvent): void;
    onRowControlLoaded(event: CustomEvent): void;
    onCellControlLoaded(event: CustomEvent): void;
    onColumnToggle({ detail }: CustomEvent): Promise<unknown>;
    onOrderChange({ detail }: CustomEvent): void;
    onPinChange({ detail }: CustomEvent): void;
    persistState(): Promise<void>;
    /**
     * Eat any load events from child tables
     */
    onRowChange(event: CustomEvent): Promise<void>;
    onPage(): Promise<void>;
    onColumnGroupChange(): Promise<void>;
    onSort(event: CustomEvent): Promise<void>;
    addRow({ detail, target }: CustomEvent): void;
    onDelete({ detail, target }: CustomEvent): void;
    updateRow({ detail }: CustomEvent): Promise<void>;
    /**
     * Send changes made to the rows to the data source to become persistent.
     */
    patchData({ detail }: CustomEvent): Promise<void>;
    /**
     * Finds all anj-context-menu items within the table and returns their nodes
     */
    columnMenu(): Promise<HTMLAnjContextMenuItemElement[]>;
    /**
     * Returns the current instantiated column definitions
     */
    getColumns(): Promise<ColumnDefinition[]>;
    /**
     * Returns the current rows displayed (not the whole data set)
     */
    getRows(): Promise<RowData[]>;
    /**
     * Refresh the underlying data source with a new array of data
     */
    updateData(data: RowData[]): Promise<void>;
    /**
     * Scroll the table to a given set of coordinates by column field and/or row key.
     */
    scrollByKey(columnField?: string, rowKey?: number | string): Promise<void>;
    /**
     * Scroll the table to a given set of coordinates by column and/or row index.
     */
    scrollByIndex(columnIndex: number, rowIndex: number): Promise<void>;
    private connectDataSource;
    private loadRowData;
    private loadColumns;
    private loadMetaColumns;
    private groupColumns;
    private loadColumnsFromStore;
    private initColumnsFromStore;
    private isChild;
    private setRows;
    private dataOptions;
    private initOptionsFromStore;
    private highlightColumn;
    private clearColumnHighlight;
    private getRowRenderer;
    render(): any[];
}
