import { CdkVirtualScrollViewport } from "@angular/cdk/scrolling";
import { AfterViewInit, ChangeDetectorRef, ElementRef, NgZone, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from "@angular/core";
import { BehaviorSubject, Subject } from "rxjs";
import { EventBus, IDataField, IDataSource, IEvent, ISelection, ISortedItem, LoggerService, PaginatorComponent, SelectorService, TableAlignmentOptions, TableComponent, VirtualViewportManager } from "@nova-ui/bits";
import { PizzagnaService } from "../../pizzagna/services/pizzagna.service";
import { TableFormatterRegistryService } from "../../services/table-formatter-registry.service";
import { WidgetConfigurationService } from "../../services/widget-configuration.service";
import { PaginatorFeatureAddonService } from "./addons/paginator-feature-addon.service";
import { SearchFeatureAddonService } from "./addons/search-feature-addon.service";
import { VirtualScrollFeatureAddonService } from "./addons/virtual-scroll-feature-addon.service";
import { ITableWidgetColumnConfig, ITableWidgetConfig, ScrollType } from "./types";
/**
 * @ignore
 */
export declare class TableWidgetComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {
    eventBus: EventBus<IEvent>;
    dataSource: IDataSource;
    private widgetConfigurationService;
    changeDetector: ChangeDetectorRef;
    pizzagnaService: PizzagnaService;
    viewportManager: VirtualViewportManager;
    zone: NgZone;
    private el;
    private logger;
    private searchAddon;
    paginatorAddon: PaginatorFeatureAddonService;
    virtualScrollAddon: VirtualScrollFeatureAddonService;
    private formattersRegistryService;
    private selectorService;
    static lateLoadKey: string;
    widgetData: any[];
    componentId: string;
    configuration: ITableWidgetConfig;
    dataFields: IDataField[];
    totalItems: number;
    indentFromTop: number;
    sortable: boolean;
    delayedMousePresenceDetectionEnabled: boolean;
    elementClass: string;
    tableData: any[];
    headers: string[];
    sortedColumn: ISortedItem;
    columns: ITableWidgetColumnConfig[];
    columnsWidthMap: Map<string, number | undefined>;
    scrollType: ScrollType;
    tableContainerHeight: number;
    isSearchEnabled: boolean;
    searchTerm$: Subject<string>;
    searchValue: string;
    onDestroy$: Subject<void>;
    tableUpdate$: Subject<void>;
    mousePresent$: BehaviorSubject<boolean>;
    rowHeight: number;
    selection: ISelection;
    table: TableComponent<any>;
    paginator: PaginatorComponent;
    vscrollViewport?: CdkVirtualScrollViewport;
    tableRows: QueryList<ElementRef>;
    private sortFilter;
    private totalPages;
    private lastPageFetched;
    isBusy: boolean;
    private sortableSet;
    private formatters;
    private tableWidgetHeight;
    private readonly defaultColumnAlignment;
    private idle;
    isSearchLimitWarningDisplayed: import("@angular/core").WritableSignal<boolean>;
    private readonly defaultMaxSearchLength;
    constructor(eventBus: EventBus<IEvent>, dataSource: IDataSource, widgetConfigurationService: WidgetConfigurationService, changeDetector: ChangeDetectorRef, pizzagnaService: PizzagnaService, viewportManager: VirtualViewportManager, zone: NgZone, el: ElementRef, logger: LoggerService, searchAddon: SearchFeatureAddonService, paginatorAddon: PaginatorFeatureAddonService, virtualScrollAddon: VirtualScrollFeatureAddonService, formattersRegistryService: TableFormatterRegistryService, selectorService: SelectorService);
    get headerTooltipsEnabled(): boolean;
    private _scrollBuffer;
    set scrollBuffer(value: number);
    private _range;
    get range(): number;
    set range(value: number);
    get interactive(): boolean;
    get clickableRow(): boolean;
    get hasVirtualScroll(): boolean;
    get hasPaginator(): boolean;
    get searchLimitMaxLength(): number;
    ngOnChanges(changes: SimpleChanges): void;
    resolveScrollType(changes: SimpleChanges): void;
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /** Checks if table should be displayed */
    shouldDisplayTable(): boolean;
    dataTrackBy(): (index: any, item: any) => any;
    columnTrackBy(index: number, item: ITableWidgetColumnConfig): string;
    /**
     * Handles updating of columns.
     * @param configuration
     */
    updateColumns(configuration: ITableWidgetConfig): void;
    /**
     * Takes widgetData from back-end, columns which are provided in table widget config and dataFields and maps them to data-format
     * which is acceptable by table component.
     * Also it can merge multiple data fields into one column. If you provide more than one dataFieldId in your
     * widget config, they will be merged to an object with needed data. This data can be passed to formatter and displayed
     * in one column.
     * @param widgetData
     * @param columns
     * @param dataFields
     * @returns any[]
     */
    mapTableData(widgetData: any[], columns: ITableWidgetColumnConfig[], dataFields: IDataField[]): any[];
    /**
     * Handles change of sorting. Gets sorted column from columns array.
     * @param event
     */
    onSortOrderChanged(event: ISortedItem): void;
    onSelectionChange(event: ISelection): void;
    onInteraction(row: any, event: MouseEvent): void;
    onSearchInputChanged(searchTerm: string): void;
    getColumnAlignment(column: ITableWidgetColumnConfig): TableAlignmentOptions;
    private setSortFilter;
    /**
     * Checks if column id has changed or if sorting order has changed
     * @param configuration
     */
    private isSortByUpdated;
    /**
     * Updates table columns and maps table data.
     */
    private updateTable;
    /**
     * Registers sorter filter.
     */
    private registerSorter;
    private setSortableSet;
    private flushTableData;
    private scrollTypeChanged;
    private getTableScrollRange;
    onPagerAction(page: any): void;
    private initPrefetchAddon;
    private resolveSortBy;
    private resolveSearch;
}
