import { NpaIconOld, NpaId, NpaOption, NpaStatuses } from '@circe/core';
import { SelectConfig } from '@circe/select';
import { NpaActionConfig } from './table-actions/table-actions.types';
import { Observable } from 'rxjs';
import { NpaDropdownConfig } from '@circe/dropdown';
export declare type NpaTableColumnType = 'date' | 'radio' | 'select' | 'checkbox' | 'link' | 'badge' | 'icon' | 'action';
export declare type NpaTableRowValue<T> = {
    npaTableDataSource: T;
    [key: string]: any;
};
export declare type NpaTableLinkAction<T> = (row: NpaTableRowValue<T>) => void;
export declare type NpaActionConfigSource<T> = (row: NpaTableRowValue<T>) => NpaActionConfig<T>[];
export declare type NpaTableIconSource<T> = (row: NpaTableRowValue<T>) => NpaIconOld;
export declare type NpaTableStatusSource<T> = (row: NpaTableRowValue<T>) => NpaStatuses;
export declare type NpaTableSortSource<T> = (sortType: 'asc' | 'desc', columnId: NpaId, rows: NpaTableRowValue<T>[]) => Observable<NpaTableRowValue<T>[]>;
export declare type NpaTableSortType = 'asc' | 'desc';
export declare type NpaTableActionType = 'button' | 'iconButton' | 'link';
export interface NpaTableConfigModel<T> {
    keyColumnParam: string;
    columns: NpaTableColumnConfigurationModel<T>[];
    actionsConfig?: NpaTableActionsConfigurationModel<T>;
    defaultActionColumnId?: string;
    hoverRows?: boolean;
    showHeader?: boolean;
    sortTable?: boolean;
    truncateTexts?: boolean;
    tableHeight?: number;
    minColumnWidth?: number;
    initialSort?: NpaTableSort;
    sortSource?: NpaTableSortSource<T>;
    emitOnScroll?: boolean;
}
export interface NpaTableActionsConfigurationModel<T> {
    actionsType: NpaTableActionType;
    dropdownConfig?: NpaDropdownConfig;
    defaultActionId?: NpaId;
    columnName?: string;
    showOnHover?: boolean;
    columnWidth?: number;
    group?: boolean;
    hideColumn?: boolean;
    actions?: NpaActionConfig<T>[] | NpaActionConfigSource<T>;
}
export interface NpaTableColumnConfigurationModel<T> {
    id?: NpaId;
    sortable?: boolean;
    defaultActionColumn?: boolean;
    columnName?: string;
    param?: string;
    type?: NpaTableColumnType;
    columnWidth?: number;
    typeConfig?: NpaRadioColumnConfig | NpaCheckboxColumnConfig | NpaSelectColumnConfig | NpaLinkColumnConfig<T> | NpaIconColumnConfig<T> | NpaBadgeColumnConfig<T> | NpaDateColumnConfig;
}
export interface NpaRadioColumnConfig {
    label?: string;
    defaultValue?: number;
}
export interface NpaCheckboxColumnConfig {
    label?: string;
    checkboxInHeader?: boolean;
    defaultValue?: boolean;
}
export interface NpaSelectColumnConfig {
    options: NpaOption[];
    multilevel?: boolean;
    multilevelButtonLabel?: string;
    placeholder?: string;
    defaultValue?: NpaId[];
    selectConfig?: SelectConfig;
}
export interface NpaLinkColumnConfig<T> {
    label: string;
    linkAction?: NpaTableLinkAction<T>;
}
export interface NpaIconColumnConfig<T> {
    icon: NpaIconOld | NpaTableIconSource<T>;
    onlyIcon?: boolean;
}
export interface NpaBadgeColumnConfig<T> {
    type?: NpaStatuses | NpaTableStatusSource<T>;
}
export interface NpaDateColumnConfig {
    dateMask?: string;
}
export interface NpaTableColumn<T> extends Omit<NpaTableColumnConfigurationModel<T>, 'type'> {
    type?: NpaTableColumnType | 'action';
    rowId?: NpaId;
    value?: any;
    icon?: string;
    onlyIcon?: boolean;
    badgeType?: string;
    dateMask?: string;
    selectConfig?: SelectConfig;
    actions?: NpaActionConfig<T>[];
}
export interface NpaTableSort {
    columnId: NpaId;
    sortType: NpaTableSortType;
}
export interface NpaTableFilter {
    columns: NpaId[];
    value: any;
    searchExactly?: boolean;
}
export interface NpaTableCheckboxSelection {
    checkAll: boolean;
    checkNone: boolean;
    model: boolean;
}
