import { AfterContentInit, EventEmitter, IterableDiffers, KeyValueDiffers, OnChanges, QueryList, SimpleChanges, TemplateRef, WritableSignal } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { ITable } from '../../table/table.type';
import { IColumn, IColumnFilter, IColumnFilterValue, IGroup, IItem, IItemInternal, ISmartTable, ISorter, ISorterValue, ITableFilter, ITableSectionProps, ItemsPerPageSelect, SortOrder } from '../smart-table.type';
import { TemplateIdDirective } from '../../shared';
import * as i0 from "@angular/core";
export declare class SmartTableComponent implements ISmartTable, AfterContentInit, OnChanges {
    private iterableDiffers;
    private keyValueDiffers;
    constructor(iterableDiffers: IterableDiffers, keyValueDiffers: KeyValueDiffers);
    readonly getColumnKey: (column: string | IColumn) => string;
    readonly getTableDataCellClass: (column: IColumn, item: IItem) => {
        [x: string]: boolean;
    };
    readonly getTableDataCellProps: (column: IColumn, item: IItem) => {};
    readonly getTableDataCellStyles: (column: IColumn, item: IItem) => Partial<CSSStyleDeclaration>;
    readonly selectedAllSubject: BehaviorSubject<boolean | "indeterminate">;
    private readonly itemsDiffer;
    private readonly itemsFilteredDiffer;
    private readonly columFilterValueDiffer;
    private readonly sorterValueDiffer;
    set activePage(value: number);
    get activePage(): number;
    private _activePage;
    cleaner: boolean;
    clickableRows: boolean;
    set columns(value: (string | IColumn | IGroup)[]);
    get columns(): IColumn[];
    columns$: WritableSignal<IColumn[]>;
    columnGroups$: WritableSignal<IGroup[][]>;
    showGroups$: import("@angular/core").Signal<boolean>;
    columnFilter?: boolean | IColumnFilter;
    set columnFilterValue(value: IColumnFilterValue);
    get columnFilterValue(): IColumnFilterValue;
    private _columnFilterValue;
    columnSorter?: boolean | ISorter;
    footer: boolean;
    header: boolean;
    set items(value: IItem[]);
    get items(): IItem[];
    items$: WritableSignal<IItemInternal[]>;
    private _items;
    set itemsPerPage(value: number);
    get itemsPerPage(): number;
    private _itemsPerPage;
    itemsPerPageLabel: string;
    itemsPerPageOptions: number[];
    itemsPerPageSelect?: boolean | ItemsPerPageSelect;
    loading?: boolean;
    noItemsLabel: string | TemplateRef<any>;
    pagination: boolean;
    set selectable(value: boolean);
    get selectable(): boolean;
    private _selectable;
    selectAll: boolean;
    set sorterValue(value: ISorterValue);
    get sorterValue(): ISorterValue;
    private _sorterValue;
    set tableFilter(filter: boolean | ITableFilter | undefined);
    get tableFilter(): boolean | ITableFilter | undefined;
    private _tableFilter?;
    tableFilterLabel: string;
    tableFilterPlaceholder: string;
    set tableFilterValue(value: string);
    get tableFilterValue(): string;
    private _tableFilterValue;
    tableBodyProps?: ITableSectionProps;
    tableFootProps?: ITableSectionProps;
    tableHeadProps?: ITableSectionProps;
    tableProps?: ITable;
    readonly selectedItemsChange: EventEmitter<IItem[]>;
    readonly sorterValueChange: EventEmitter<ISorterValue>;
    readonly activePageChange: EventEmitter<number>;
    readonly itemsPerPageChange: EventEmitter<number>;
    readonly rowClick: EventEmitter<any>;
    readonly columnFilterValueChange: EventEmitter<IColumnFilterValue>;
    readonly filteredItemsChange: EventEmitter<IItemInternal[]>;
    readonly tableFilterValueChange: EventEmitter<string>;
    columnTemplates: QueryList<TemplateIdDirective>;
    templates: {
        [key: string]: (TemplateRef<any> | null);
    };
    columnFilterTemplates: {
        [key: string]: (TemplateRef<any> | null);
    };
    columnLabelTemplates: {
        [key: string]: (TemplateRef<any> | null);
    };
    summaryRowTemplate: TemplateRef<unknown> | null;
    ngAfterContentInit(): void;
    get selectedAll(): boolean | "indeterminate";
    get tableFilterState(): string;
    get columnFilterState(): IColumnFilterValue;
    get numberOfPages(): number;
    get colspan(): number;
    get firstItemOnActivePageIndex(): number;
    get itemsOnActivePage(): IItemInternal[];
    get currentItems(): IItemInternal[];
    rawColumnNames$: import("@angular/core").Signal<string[]>;
    itemsDataColumns$: import("@angular/core").Signal<string[]>;
    get sortedItems(): IItemInternal[];
    get tableFilterEvent(): 'change' | 'input';
    private _columnFiltered;
    get columnFiltered(): IItemInternal[];
    get tableFiltered(): IItemInternal[];
    get isFiltered(): string;
    private setItems;
    handleSortChange($event: {
        columnKey: string;
        index: number;
        order?: SortOrder;
    }): void;
    isSortable(i: number): boolean | undefined;
    handleSorterChange(column: string, index: number, order?: SortOrder): void;
    setActivePage($event: number): void;
    handleColumnFilterChange($event: any): void;
    handleTableFilterChange($event: {
        value: string;
        type: string;
    }): void;
    clean($event: MouseEvent): void;
    handleItemsPerPageChange(value: number): void;
    handleRowChecked($event: Event, item: IItemInternal): void;
    handleSelectAllChange($event: any): void;
    handleRowClick(param: {
        $event: MouseEvent;
        item: IItemInternal;
        i: number;
    }): void;
    ngOnChanges(changes: SimpleChanges): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SmartTableComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SmartTableComponent, "c-smart-table", ["cSmartTable"], { "activePage": { "alias": "activePage"; "required": false; }; "cleaner": { "alias": "cleaner"; "required": false; }; "clickableRows": { "alias": "clickableRows"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "columnFilter": { "alias": "columnFilter"; "required": false; }; "columnFilterValue": { "alias": "columnFilterValue"; "required": false; }; "columnSorter": { "alias": "columnSorter"; "required": false; }; "footer": { "alias": "footer"; "required": false; }; "header": { "alias": "header"; "required": false; }; "items": { "alias": "items"; "required": false; }; "itemsPerPage": { "alias": "itemsPerPage"; "required": false; }; "itemsPerPageLabel": { "alias": "itemsPerPageLabel"; "required": false; }; "itemsPerPageOptions": { "alias": "itemsPerPageOptions"; "required": false; }; "itemsPerPageSelect": { "alias": "itemsPerPageSelect"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "noItemsLabel": { "alias": "noItemsLabel"; "required": false; }; "pagination": { "alias": "pagination"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "selectAll": { "alias": "selectAll"; "required": false; }; "sorterValue": { "alias": "sorterValue"; "required": false; }; "tableFilter": { "alias": "tableFilter"; "required": false; }; "tableFilterLabel": { "alias": "tableFilterLabel"; "required": false; }; "tableFilterPlaceholder": { "alias": "tableFilterPlaceholder"; "required": false; }; "tableFilterValue": { "alias": "tableFilterValue"; "required": false; }; "tableBodyProps": { "alias": "tableBodyProps"; "required": false; }; "tableFootProps": { "alias": "tableFootProps"; "required": false; }; "tableHeadProps": { "alias": "tableHeadProps"; "required": false; }; "tableProps": { "alias": "tableProps"; "required": false; }; }, { "selectedItemsChange": "selectedItemsChange"; "sorterValueChange": "sorterValueChange"; "activePageChange": "activePageChange"; "itemsPerPageChange": "itemsPerPageChange"; "rowClick": "rowClick"; "columnFilterValueChange": "columnFilterValueChange"; "filteredItemsChange": "filteredItemsChange"; "tableFilterValueChange": "tableFilterValueChange"; }, ["columnTemplates"], ["[customHeader]"], true, never>;
    static ngAcceptInputType_activePage: unknown;
    static ngAcceptInputType_cleaner: unknown;
    static ngAcceptInputType_clickableRows: unknown;
    static ngAcceptInputType_footer: unknown;
    static ngAcceptInputType_header: unknown;
    static ngAcceptInputType_itemsPerPage: unknown;
    static ngAcceptInputType_pagination: unknown;
    static ngAcceptInputType_selectable: unknown;
    static ngAcceptInputType_selectAll: unknown;
}
