import { OnInit, EventEmitter, SimpleChanges, OnChanges, AfterViewInit } from '@angular/core';
import { MatTableDataSource } from '@angular/material/table';
import { MatSort } from '@angular/material/sort';
import { MatPaginator } from '@angular/material/paginator';
import { SelectionModel } from '@angular/cdk/collections';
import { MatCheckboxChange } from '@angular/material/checkbox';
import { FormControl } from '@angular/forms';
import { MatSelectChange } from '@angular/material/select';
import { XlsxExportService } from '../xlsx-table-export/service/xlsx-export.service';
import { BehaviorSubject, Subject } from 'rxjs';
import { SearchTerm } from '../table-search-input/table-search-input.component';
import { ColumnStorageService, ColumnStorage } from '../services/column-storage.service';
export interface DynamicTableColumnDefinition extends DynamicTableColumn {
    columnDef: string;
    columnTitle: string;
    type?: 'number' | 'date' | 'icon';
    search?: boolean;
    total?: boolean;
    average?: boolean;
    sticky?: boolean;
    stickyEnd?: boolean;
    icons?: {
        value: any;
        matIcon: string;
        color: string;
        matTooltip: string;
    }[];
    sort?: 'asc' | 'desc';
    dateFormat?: string;
    hidden?: boolean;
    ignoreSave?: boolean;
    cellClassKey?: string;
    unit?: {
        key: string;
        position: 'before' | 'after';
    };
}
interface DynamicTableColumn {
    totalValue?: number;
    averageValue?: number;
}
export interface DynamicTableCellClickResult {
    row: any;
    column: string;
    data: string;
}
export declare class DynamicTableComponent<T> implements OnInit, OnChanges, AfterViewInit {
    private locale;
    private xlsxExportService;
    private columnStorageService;
    tableId: string;
    tableData: T[];
    rowClick: boolean;
    cellClick: boolean;
    fileName: string;
    columns: DynamicTableColumnDefinition[];
    pageSizeOptions: number[];
    export: boolean;
    filter: boolean;
    multiple: boolean;
    optionalColumns: boolean;
    emitFilteredData: boolean;
    rowClicked: EventEmitter<T>;
    cellClicked: EventEmitter<DynamicTableCellClickResult>;
    selectedRows: EventEmitter<T[]>;
    filterResult: EventEmitter<T[]>;
    sort: MatSort;
    paginator: MatPaginator;
    selection: SelectionModel<T>;
    displayedColumns: string[];
    dataSource: MatTableDataSource<T>;
    totalsRowVisible: boolean;
    xlsxHeaders: any;
    exportData: T[];
    columnsToShow: FormControl;
    filterKeyUp: BehaviorSubject<string>;
    sortActive: string;
    sortDirection: 'asc' | 'desc';
    tableFilters: {
        type: 'column' | 'global';
        reference: any;
        search: string;
    }[];
    searchLoading: boolean;
    columnSearch$: Subject<SearchTerm>;
    savedColumnsLoading: boolean;
    constructor(locale: string, xlsxExportService: XlsxExportService, columnStorageService: ColumnStorageService);
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngOnInit(): void;
    updateXLSXHeaders(): void;
    updateColumnTotals(): void;
    applyFilter(searchTerms: SearchTerm[]): void;
    applyColumnFilter(element: any, column: any, columnTitle: string, searchType: '=' | '!=' | '>=' | '<=' | 'empty'): void;
    _rowClicked(row: any): void;
    onMatCellClick(row: any, column: DynamicTableColumnDefinition): void;
    /** Whether the number of selected elements matches the total number of rows. */
    isAllSelected(): boolean;
    /** Selects all rows if they are not all selected; otherwise clear selection. */
    masterToggle(): void;
    toggle(event: MatCheckboxChange, row: T): void;
    emitSelected(): void;
    setColumns(): void;
    setStaticColumns(): void;
    displayColumnsChanged(event: MatSelectChange): void;
    eportToExcell(): void;
    getFilteredData(): void;
    cloneData(): void;
    formatExportData(): void;
    nestedFilterCheck(search: any, data: any, key: any): any;
    setDefaultSorting(): void;
    setSavedColumnSelection(saved: ColumnStorage): void;
    saveCurrentColumnSelection(displayedColumns: string[]): void;
}
export {};
