import { EventEmitter, OnChanges, SimpleChanges, AfterViewInit, AfterContentInit, OnDestroy, OnInit, ElementRef, DestroyRef, TrackByFunction, InjectionToken } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
import { MatMenuTrigger } from '@angular/material/menu';
import { TableAction, TableBulkAction, TableButtonEvent, TableColumn, TableExportOutput, TableOptions, TablePagination } from './table.interfaces';
import { CacTableFormMenuComponent } from './table-form-menu/table-form-menu.component';
import { DataGetRequest, ItemRecord } from '../../../../core';
import { ButtonClickEvent, CacPaginationComponent } from '../../ui';
import { CacPrintableTableComponent } from '../printable-table';
import { CdkTableDataSourceInput } from '@angular/cdk/table';
import { CacTableColActionComponent } from './columns/table-col-action/table-col-action.component';
import * as i0 from "@angular/core";
interface TableRowData {
    value: any;
    value$?: Observable<any>;
    rawValue: any;
    dynamicClass: string;
    dynamicClass$?: Observable<string | undefined>;
    isValueTrue: boolean;
    isValueTrue$?: Observable<boolean>;
    getValue: () => any;
}
interface TableRowAction {
    disabled$?: Observable<boolean>;
    disabled?: boolean;
    permission?: string;
}
export interface TableRow<T> {
    id: string | number;
    mutation: number;
    data: {
        [p: string]: TableRowData;
    };
    originalItem: T;
    actions: {
        [p: number]: TableRowAction;
    };
}
export interface TableColumnData<T> extends TableColumn<T> {
    prop: string;
    isHidden: boolean;
}
export declare const TABLE_COMPONENT_CONFIG: InjectionToken<Partial<TableOptions<any>>>;
export declare class TablePaginationMismatchError extends Error {
    constructor();
}
export declare class TableClass<T extends object> {
    options?: TableOptions<T> | undefined;
    private _initFn?;
    items$: BehaviorSubject<T[] | undefined>;
    ref?: CacTableComponent<T>;
    constructor(options?: TableOptions<T> | undefined);
    onInit(fn: typeof this._initFn): void;
    setOptions(options: TableOptions<T>): void;
    setRef(ref: CacTableComponent<T>): void;
    refresh(): void;
}
export declare function table<T extends object>(options?: TableOptions<T>): TableClass<T>;
export declare class CacTableComponent<T extends object> implements OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {
    readonly destroyRef: DestroyRef;
    private readonly cdr;
    private readonly dialog;
    private readonly config;
    readonly ACTIVE_STRING_VALUE = "Active";
    readonly EMPTY_VALUE: string;
    readonly ADD_TEXT: string;
    readonly EDIT_TEXT: string;
    readonly NEW_TEXT: string;
    readonly TRUE_TEXT: string;
    readonly FALSE_TEXT: string;
    readonly ACTIVE_TEXT: string;
    readonly INACTIVE_TEXT: string;
    readonly HOURS_TEXT: string;
    readonly HOURS_AND_TEXT: string;
    readonly MINUTES_TEXT: string;
    readonly DATE_TEXT: string;
    readonly PLATE_COUNTRY_TEXT: string;
    readonly TABLE_DEFAULTS: TableOptions<any>;
    pagination?: CacPaginationComponent;
    tableFormMenu: CacTableFormMenuComponent;
    menuTriggerAddButton?: MatMenuTrigger;
    printableTable: CacPrintableTableComponent;
    tableElement: ElementRef<HTMLElement>;
    actionCol: CacTableColActionComponent;
    rawOptions: TableClass<T> | TableOptions<T>;
    add: EventEmitter<TableButtonEvent>;
    clickRow: EventEmitter<T>;
    export: EventEmitter<TableExportOutput>;
    private _sessionSubs;
    private _eventSub?;
    private _printSub?;
    private _exportSub?;
    private _fetchSub?;
    private _refreshTrigger$;
    private _dataSource$;
    private _class?;
    protected trackByProp: (index: number, item: TableColumnData<any>) => string;
    protected trackByItem: TrackByFunction<any>;
    protected isFirstLoad: import("@angular/core").WritableSignal<boolean>;
    dataSource: CdkTableDataSourceInput<TableRow<T> | undefined>;
    tableRawResponse$: BehaviorSubject<any>;
    options: import("@angular/core").WritableSignal<TableOptions<T>>;
    totalItems: import("@angular/core").WritableSignal<number>;
    lastRequestOptions: import("@angular/core").WritableSignal<DataGetRequest | undefined>;
    loading: import("@angular/core").WritableSignal<boolean>;
    initialized: import("@angular/core").WritableSignal<boolean>;
    hiddenColsArray: import("@angular/core").WritableSignal<(keyof T)[]>;
    highlightedRowsArray: import("@angular/core").WritableSignal<(string | number)[]>;
    paginationOptions: import("@angular/core").Signal<TablePagination | undefined>;
    hiddenCols: import("@angular/core").Signal<{ [key in keyof T]: boolean; }>;
    highlightedRows: import("@angular/core").Signal<{
        [key: string]: boolean;
        [key: number]: boolean;
    }>;
    columns: import("@angular/core").Signal<TableColumnData<T>[]>;
    actions: import("@angular/core").Signal<TableAction<T>[]>;
    bulkActions: import("@angular/core").Signal<ItemRecord<TableBulkAction<T>, unknown>[]>;
    isActionHidden: import("@angular/core").Signal<boolean>;
    hasFilter: import("@angular/core").Signal<boolean>;
    columnsLabels: import("@angular/core").Signal<string[]>;
    constructor();
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngAfterContentInit(): void;
    ngOnDestroy(): void;
    print(): Observable<null>;
    getCurrentItems(): TableRow<T>[] | undefined;
    getCurrentItems$(): BehaviorSubject<TableRow<T>[] | undefined>;
    scrollToRowById(id: number | string | undefined): void;
    scrollToRowByIndex(index: number): void;
    setHighlighted(...ids: (string | number | undefined)[]): void;
    clearHighlights(): void;
    refresh(): void;
    hide(...keys: (keyof T)[]): void;
    show(...keys: (keyof T)[]): void;
    setHidden(state: boolean, ...cols: (keyof T)[]): void;
    getRowsElementList(): HTMLTableRowElement[];
    getItem(id: number | string): TableRow<T> | null | undefined;
    mutateItem(id: number | string, newData: Partial<T>): void;
    setOptions(): void;
    protected onAction(item: T, action: TableAction<T>, trigger: MatMenuTrigger, e?: ButtonClickEvent): void;
    protected onBulkActionApply(bulkAction: any, e: ButtonClickEvent): void;
    protected onAdd(e: ButtonClickEvent): void;
    protected onRowClick(row: T): void;
    protected onExport(e: ButtonClickEvent): void;
    protected onPaginate(): void;
    protected onSort(): void;
    protected onFilter(): void;
    protected onPrint(e: ButtonClickEvent): void;
    protected onRefresh(): void;
    protected onHeaderSelection(checked: boolean): void;
    protected onItemSelection(item: T, checked: boolean): void;
    private invokeAdapter;
    private mapResponseToItems;
    private mapItemToCol;
    private mapItemToRow;
    private _refresh;
    private actionAutoPermissionize;
    private getPropertyValue;
    private transformValue;
    private isValueTrue;
    private isValueEmpty;
    private colToTransformFn;
    private createTableStateParam;
    private createTableMenuParam;
    private createTableDialogParam;
    private subscribeToEventResult;
    static ɵfac: i0.ɵɵFactoryDeclaration<CacTableComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<CacTableComponent<any>, "cac-table", never, { "rawOptions": { "alias": "options"; "required": false; }; }, { "add": "add"; "clickRow": "clickRow"; "export": "export"; }, never, ["[slot=header-start]", "[slot=header]", "[slot=footer]"], true, never>;
}
export {};
