import { Observable } from 'rxjs';
import { ElCollectionViewer } from '../../cdk/collections/collection-viewer';
import { ElDataSource } from '../../cdk/table/data-source';
import { ElSortable, ElSortRequest } from '../tree-grid-sort.component';
import { ElTreeGridDataService } from './tree-grid-data.service';
import { ElTreeGridFilterService } from './tree-grid-filter.service';
import { ElTreeGridSortService } from './tree-grid-sort.service';
import { ElGetters, ElTreeGridPresentationNode } from './tree-grid.model';
import { ElToggleOptions, ElTreeGridService } from './tree-grid.service';
export interface ElFilterable {
    filter(filterRequest: string): any;
}
export declare class ElTreeGridDataSource<T> extends ElDataSource<ElTreeGridPresentationNode<T>> implements ElSortable, ElFilterable {
    private sortService;
    private filterService;
    private treeGridService;
    private treeGridDataService;
    /** Stream that emits when a new data array is set on the data source. */
    private data;
    /** Stream emitting render data to the table (depends on ordered data changes). */
    private readonly renderData;
    private readonly filterRequest;
    private readonly sortRequest;
    constructor(sortService: ElTreeGridSortService<T>, filterService: ElTreeGridFilterService<T>, treeGridService: ElTreeGridService<T>, treeGridDataService: ElTreeGridDataService<T>);
    setData<N>(data: N[], customGetters?: ElGetters<N, T>): void;
    connect(collectionViewer: ElCollectionViewer): Observable<ElTreeGridPresentationNode<T>[] | ReadonlyArray<ElTreeGridPresentationNode<T>>>;
    disconnect(collectionViewer: ElCollectionViewer): void;
    expand(row: T): void;
    collapse(row: T): void;
    toggle(row: T, options?: ElToggleOptions): void;
    toggleByIndex(dataIndex: number, options?: ElToggleOptions): void;
    getLevel(rowIndex: number): number;
    sort(sortRequest: ElSortRequest): void;
    filter(searchQuery: string): void;
    protected updateChangeSubscription(): void;
    private filterData;
    private sortData;
}
export declare class ElTreeGridDataSourceBuilder<T> {
    private filterService;
    private sortService;
    private treeGridService;
    private treeGridDataService;
    constructor(filterService: ElTreeGridFilterService<T>, sortService: ElTreeGridSortService<T>, treeGridService: ElTreeGridService<T>, treeGridDataService: ElTreeGridDataService<T>);
    create<N>(data: N[], customGetters?: ElGetters<N, T>): ElTreeGridDataSource<T>;
}
