import { CdkDragStart } from '@angular/cdk/drag-drop';
import { AfterContentInit, AfterViewChecked, AfterViewInit, ApplicationRef, ChangeDetectorRef, ElementRef, Injector, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
import { Any, Nullable, PlainObjectOf } from '@angular-ru/cdk/typings';
import { Subject } from 'rxjs';
import { AbstractTableBuilderApiDirective } from './abstract-table-builder-api.directive';
import { AutoHeightDirective } from './directives/auto-height.directive';
import { CalculateRange, ColumnsSchema } from './interfaces/table-builder.external';
import { RecalculatedStatus, RowId } from './interfaces/table-builder.internal';
import { ContextMenuService } from './services/context-menu/context-menu.service';
import { DraggableService } from './services/draggable/draggable.service';
import { FilterableService } from './services/filterable/filterable.service';
import { ResizableService } from './services/resizer/resizable.service';
import { SelectionService } from './services/selection/selection.service';
import { SortableService } from './services/sortable/sortable.service';
import { NgxTableViewChangesService } from './services/table-view-changes/ngx-table-view-changes.service';
import { TemplateParserService } from './services/template-parser/template-parser.service';
import * as i0 from "@angular/core";
export declare class TableBuilderComponent<T> extends AbstractTableBuilderApiDirective<T> implements OnChanges, OnInit, AfterContentInit, AfterViewInit, AfterViewChecked, OnDestroy {
    readonly cd: ChangeDetectorRef;
    headerRef: ElementRef<HTMLDivElement>;
    footerRef: ElementRef<HTMLDivElement>;
    readonly autoHeight: AutoHeightDirective<T>;
    dirty: boolean;
    rendering: boolean;
    isRendered: boolean;
    contentInit: boolean;
    contentCheck: boolean;
    recalculated: RecalculatedStatus;
    sourceIsNull: boolean;
    afterViewInitDone: boolean;
    readonly selection: SelectionService<T>;
    readonly templateParser: TemplateParserService<T>;
    readonly ngZone: NgZone;
    readonly resize: ResizableService;
    readonly sortable: SortableService<T>;
    readonly contextMenu: ContextMenuService<T>;
    readonly filterable: FilterableService<T>;
    protected readonly app: ApplicationRef;
    protected readonly draggable: DraggableService<T>;
    protected readonly viewChanges: NgxTableViewChangesService;
    private forcedRefresh;
    private readonly _destroy$;
    private timeoutCheckedTaskId;
    private timeoutScrolledId;
    private timeoutViewCheckedId;
    private frameCalculateViewportId;
    private selectionUpdateTaskId;
    private changesTimerId;
    constructor(cd: ChangeDetectorRef, injector: Injector);
    get destroy$(): Subject<boolean>;
    get selectedKeyList(): RowId[];
    /** @deprecated
     * Use `selectedKeyList` instead
     */
    get selectionEntries(): PlainObjectOf<boolean>;
    get sourceExists(): boolean;
    get rootHeight(): string;
    private get expandableTableExpanded();
    private get viewIsDirty();
    private get needUpdateViewport();
    private get viewportHeight();
    private get scrollOffsetTop();
    private get nonIdenticalStructure();
    checkSourceIsNull(): boolean;
    recalculateHeight(): void;
    openContextMenu($event: MouseEvent): void;
    ngOnChanges(changes: SimpleChanges): void;
    markForCheck(): void;
    ngOnInit(): void;
    markVisibleColumn(column: HTMLDivElement, visible: boolean): void;
    ngAfterContentInit(): void;
    ngAfterViewInit(): void;
    cdkDragMoved(event: CdkDragStart, root: HTMLElement): void;
    ngAfterViewChecked(): void;
    ngOnDestroy(): void;
    markTemplateContentCheck(): void;
    markDirtyCheck(): void;
    /**
     * @internal
     * @description: Key table generation for internal use
     * @sample: keys - ['id', 'value'] -> { id: true, value: true }
     */
    generateColumnsKeyMap(keys: string[]): PlainObjectOf<boolean>;
    render(): void;
    renderTable(): void;
    toggleColumnVisibility(key?: Nullable<string>): void;
    updateColumnsSchema(patch: PlainObjectOf<Partial<ColumnsSchema>>): void;
    resetSchema(): void;
    calculateViewport(force?: boolean): void;
    setSource(source: Nullable<T[]>): void;
    updateTableHeight(): void;
    filterBySubstring(substring: Nullable<Any>): void;
    protected calculateViewPortByRange({ start, end, bufferOffset, force }: CalculateRange): void;
    protected startIndexIsNull(): boolean;
    protected needRecalculateBuffer(bufferOffset: number): boolean;
    protected recalculateStartIndex(start: number): number;
    protected calculateBuffer(isDownMoved: boolean, start: number, end: number): number;
    protected calculateEndIndex(start: number): number;
    protected ignoreCalculate(): boolean;
    protected isDownMoved(): boolean;
    protected updateViewportInfo(start: number, end: number): void;
    private checkCorrectInitialSchema;
    private setSortTypes;
    private handleFilterDefinitionChanges;
    private listenColumnListChanges;
    private createDiffIndexes;
    private listenFilterResetChanges;
    private afterViewInitChecked;
    private listenScroll;
    private scrollHandler;
    private updateViewport;
    private cancelScrolling;
    private getOffsetVisibleEndIndex;
    private getVisibleCountItems;
    private getOffsetVisibleStartIndex;
    private preSortAndFilterTable;
    private preRenderTable;
    private checkSelectionValue;
    private checkFilterValues;
    private recheckTemplateChanges;
    private listenSelectionChanges;
    private tryRefreshViewModelBySelection;
    private viewForceRefresh;
    private listenTemplateChanges;
    private syncDrawColumns;
    private getCustomColumnSchemaByIndex;
    /**
     * @description - it is necessary to combine the templates given from the server and default
     * @param key - column schema from rendered templates map
     * @param index - column position
     */
    private getCompiledColumnSchema;
    /**
     * TODO: the schema is not used anything
     * @description: column meta information processing
     * @param schema - column schema
     * @param key - column name
     */
    private processedColumnList;
    /**
     * @description: notification that the table has been rendered
     * @see TableBuilderComponent#isRendered
     */
    private emitRendered;
    /**
     * @description: parsing templates and input parameters (keys, schemaColumns) for the number of columns
     */
    private generateDisplayedColumns;
    private validationSchemaColumnsAndResetIfInvalid;
    /**
     * @description: this method returns the keys by which to draw table columns
     * <allowedKeyMap> - possible keys from the model, this must be checked,
     * because users can draw the wrong keys in the template (ngx-column key=invalid)
     */
    private parseTemplateKeys;
    private listenExpandChange;
    static ɵfac: i0.ɵɵFactoryDeclaration<TableBuilderComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TableBuilderComponent<any>, "ngx-table-builder", never, {}, {}, never, ["ngx-empty", "ngx-source-null", "ngx-header", "ngx-footer", "ngx-context-menu", "ngx-filter"]>;
}
//# sourceMappingURL=table-builder.component.d.ts.map