import { Injector } from '@angular/core';
import { Observable } from 'rxjs';
import { IColumn } from '../column';
import { IDataSource, IServerSearchFunction } from '../dataSources/index';
import { IFilter, IFilterGroup, IFilterGroupSettings, IModeFilterGroup, IModeFilterGroupSettings, IRangeFilterGroup, IRangeFilterGroupSettings, SelectFilter, ISelectFilterSettings, IDateFilter, IDateFilterSettings } from '../filters/index';
export declare enum CardContainerType {
    standard = 0,
    selectable = 1,
}
export interface ICardContainerSettings {
    search?: boolean;
    paging?: boolean;
    maxColumnSorts?: number;
    permanentFooters?: boolean;
    disableSelection?: {
        (item: any): string;
    };
}
export interface ICardContainerInstance {
}
export interface ICardContainerConstructor<TDataType> {
    search?: boolean;
    paging?: boolean;
    maxColumnSorts?: number;
    permanentFooters?: boolean;
    disableSelection?: {
        (item: any): string;
    };
    columns: IColumn<TDataType>[];
    dataSource: IDataSource<TDataType>;
    filters: IFilter<TDataType, any>[];
}
export declare class CardContainerBuilderService {
    private injector;
    constructor(injector: Injector);
    getInstance(settings: ICardContainerSettings): ICardContainerInstance;
    addColumn<TDataType>(container: ICardContainerInstance, column: IColumn<TDataType>): void;
    buildObservableDataSource<TDataType>(container: ICardContainerInstance, data$: Observable<TDataType[]>): IDataSource<TDataType>;
    buildSmartDataSource<TDataType>(container: ICardContainerInstance, getDataSet: IServerSearchFunction<TDataType>): IDataSource<TDataType>;
    buildFilterGroup<TDataType>(container: ICardContainerInstance, settings: IFilterGroupSettings<TDataType>): IFilterGroup<TDataType>;
    buildModeFilterGroup<TDataType>(container: ICardContainerInstance, settings: IModeFilterGroupSettings<TDataType>): IModeFilterGroup<TDataType>;
    buildRangeFilterGroup<TDataType>(container: ICardContainerInstance, settings: IRangeFilterGroupSettings<TDataType>): IRangeFilterGroup<TDataType>;
    buildSelectFilter<TDataType, TFilterType>(container: ICardContainerInstance, settings: ISelectFilterSettings<TDataType, TFilterType>): SelectFilter<TDataType, TFilterType>;
    buildDateFilter<TDataType>(container: ICardContainerInstance, settings: IDateFilterSettings<TDataType>): IDateFilter<TDataType>;
}
