import { TrackByFunction, Signal } from '@angular/core';
import { DbxTableStore } from './table.store';
import { LoadingState } from '@dereekb/rxjs';
import { Observable } from 'rxjs';
import { MatTable } from '@angular/material/table';
import { DbxTableItemGroup } from './table';
import * as i0 from "@angular/core";
export declare const DBX_TABLE_ITEMS_COLUMN_NAME = "_items";
export declare const DBX_TABLE_ACTIONS_COLUMN_NAME = "_actions";
export interface DbxTableViewGroupElement<T, G> {
    readonly type: 'group';
    readonly location: 'header' | 'footer';
    readonly group: DbxTableItemGroup<T, G>;
}
export interface DbxTableViewItemElement<T, G> {
    readonly type: 'item';
    readonly item: T;
}
export type DbxTableViewElement<T, G> = DbxTableViewGroupElement<T, G> | DbxTableViewItemElement<T, G>;
export declare function isDbxTableViewGroupElement<T, G>(element: DbxTableViewElement<T, G>): element is DbxTableViewGroupElement<T, G>;
export declare function isDbxTableViewItemElement<T, G>(element: DbxTableViewElement<T, G>): element is DbxTableViewItemElement<T, G>;
/**
 * A table with fixed content
 */
export declare class DbxTableViewComponent<I, C, T, G = unknown> {
    readonly tableStore: DbxTableStore<I, C, T, G>;
    readonly table: Signal<MatTable<DbxTableViewElement<T, G>>>;
    readonly DEFAULT_TRACK_BY_FUNCTION: TrackByFunction<any>;
    readonly scrollDistance: import("@angular/core").InputSignal<number>;
    readonly throttleScroll: import("@angular/core").InputSignal<number>;
    readonly itemsColumnName = "_items";
    readonly actionsColumnName = "_actions";
    readonly innerColumns$: Observable<import("./table").DbxTableColumn<C>[]>;
    readonly innerColumnNames$: Observable<string[]>;
    readonly innerColumnsSignal: Signal<import("./table").DbxTableColumn<C>[] | undefined>;
    readonly innerColumnNamesSignal: Signal<string[] | undefined>;
    readonly elementsState$: Observable<LoadingState<DbxTableViewElement<T, G>[]>>;
    readonly elements$: Observable<DbxTableViewElement<T, G>[]>;
    readonly displayedColumns$: Observable<string[]>;
    readonly displayedColumnsSignal: Signal<string[]>;
    readonly trackByFunction$: Observable<TrackByFunction<T>>;
    readonly inputTrackByFunctionSignal: Signal<TrackByFunction<any> | TrackByFunction<T>>;
    readonly trackElementByFunctionSignal: Signal<TrackByFunction<DbxTableViewElement<T, G>>>;
    readonly context: import("@dereekb/rxjs").MutableLoadingStateContext<unknown, LoadingState<import("./table").DbxTableContextData<I, C, T>>, import("@dereekb/rxjs").LoadingContextEvent & LoadingState<import("./table").DbxTableContextData<I, C, T>>>;
    readonly dataLoadingContext: import("@dereekb/rxjs").MutableLoadingStateContext<unknown, LoadingState<DbxTableViewElement<T, G>[]>, import("@dereekb/rxjs").LoadingContextEvent & LoadingState<DbxTableViewElement<T, G>[]>>;
    readonly contextSignal: Signal<LoadingState<import("./table").DbxTableContextData<I, C, T>> | undefined>;
    readonly dataLoadingContextSignal: Signal<LoadingState<DbxTableViewElement<T, G>[]> | undefined>;
    readonly viewDelegateSignal: Signal<import("./table").DbxTableViewDelegate<I, C, T, G> | undefined>;
    readonly elementsSignal: Signal<DbxTableViewElement<T, G>[]>;
    readonly tableCssClasses: Signal<string | undefined>;
    onScrollDown(): void;
    showItemRow(_: number, row: DbxTableViewElement<T, G>): boolean;
    showGroupHeaderRow(_: number, row: DbxTableViewElement<T, G>): boolean;
    showGroupFooterRow(_: number, row: DbxTableViewElement<T, G>): boolean;
    readonly showFooterRowSignal: Signal<boolean | undefined>;
    readonly showFullSummaryRowSignal: Signal<boolean>;
    static ɵfac: i0.ɵɵFactoryDeclaration<DbxTableViewComponent<any, any, any, any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DbxTableViewComponent<any, any, any, any>, "dbx-table-view", never, { "scrollDistance": { "alias": "scrollDistance"; "required": false; "isSignal": true; }; "throttleScroll": { "alias": "throttleScroll"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}
