import { CdkDragSortEvent } from '@angular/cdk/drag-drop';
import { AfterContentInit, AfterViewChecked, AfterViewInit, ApplicationRef, ChangeDetectorRef, ElementRef, EventEmitter, NgZone, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges } from '@angular/core';
import { DeepPartial, Fn, Nullable, PlainObjectOf } from '@angular-ru/cdk/typings';
import { NgxColumnComponent } from './components/ngx-column/ngx-column.component';
import { NgxContextMenuComponent } from './components/ngx-context-menu/ngx-context-menu.component';
import { NgxFilterComponent } from './components/ngx-filter/ngx-filter.component';
import { NgxFooterComponent } from './components/ngx-footer/ngx-footer.component';
import { NgxHeaderComponent } from './components/ngx-header/ngx-header.component';
import { NgxOptionsComponent } from './components/ngx-options/ngx-options.component';
import { ColumnsSchema, ExcludePattern, OrderedField, ProduceDisableFn, TableUpdateSchema, ViewPortInfo } from './interfaces/table-builder.external';
import { ResizeEvent } from './interfaces/table-builder.internal';
import { ContextMenuService } from './services/context-menu/context-menu.service';
import { DraggableService } from './services/draggable/draggable.service';
import { FilterDescriptor } from './services/filterable/filter-descriptor';
import { FilterableService } from './services/filterable/filterable.service';
import { ResizableService } from './services/resizer/resizable.service';
import { SelectionMap } from './services/selection/selection';
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 { TableSortTypes } from './types/table-sort-types';
import * as i0 from "@angular/core";
export declare abstract class AbstractTableBuilderApiDirective<T> implements OnChanges, OnInit, AfterViewInit, AfterContentInit, AfterViewChecked, OnDestroy {
    abstract readonly templateParser: TemplateParserService<T>;
    abstract readonly selection: SelectionService<T>;
    abstract readonly cd: ChangeDetectorRef;
    abstract readonly resize: ResizableService;
    abstract readonly sortable: SortableService<T>;
    abstract readonly contextMenu: ContextMenuService<T>;
    abstract readonly filterable: FilterableService<T>;
    abstract readonly ngZone: NgZone;
    protected abstract readonly app: ApplicationRef;
    protected abstract readonly viewChanges: NgxTableViewChangesService;
    protected abstract readonly draggable: DraggableService<T>;
    private filterIdTask;
    private idleDetectChangesId;
    private columnFrameId;
    private onChangesId;
    private _headHeight;
    private _rowHeight;
    protected originalSource: Nullable<T[]>;
    protected renderedCountKeys: Nullable<number>;
    protected isDragMoving: boolean;
    height: Nullable<string | number>;
    width: Nullable<string | number>;
    source: Nullable<T[]>;
    keys: string[];
    striped: boolean;
    name: Nullable<string>;
    skipSort: boolean | string;
    sortTypes: TableSortTypes;
    filterDefinition: Nullable<FilterDescriptor[]>;
    excludeKeys: ExcludePattern<T>[];
    autoWidth: boolean | string;
    autoHeightDetect: boolean;
    nativeScrollbar: boolean;
    primaryKey: string;
    verticalBorder: boolean;
    enableSelection: boolean | string;
    enableFiltering: boolean | string;
    produceDisableFn: ProduceDisableFn<T>;
    rowCssClasses: PlainObjectOf<string[]>;
    schemaColumns: Nullable<TableUpdateSchema>;
    schemaVersion: number;
    readonly afterRendered: EventEmitter<boolean>;
    readonly schemaChanges: EventEmitter<TableUpdateSchema>;
    readonly onChanges: EventEmitter<Nullable<T[]>>;
    readonly sortChanges: EventEmitter<OrderedField[]>;
    columnOptions: Nullable<NgxOptionsComponent>;
    columnTemplates: Nullable<QueryList<NgxColumnComponent<T>>>;
    contextMenuTemplate: Nullable<NgxContextMenuComponent<T>>;
    ngxEmptyContent: Nullable<ElementRef>;
    headerTemplate: Nullable<NgxHeaderComponent>;
    footerTemplate: Nullable<NgxFooterComponent>;
    filterTemplate: Nullable<NgxFilterComponent<T>>;
    scrollContainer: ElementRef<HTMLElement>;
    columnList: QueryList<ElementRef<HTMLDivElement>>;
    scrollbarWidth: number;
    columnListWidth: number;
    viewPortInfo: ViewPortInfo;
    tableViewportChecked: boolean;
    /**
     * @description: the custom names of the column list to be displayed in the view.
     * @example:
     *    <table-builder #table
     *        [source]="[{ id: 1, name: 'hello', value: 'world', description: 'text' }, ...]"
     *        [exclude]="[ 'description' ]">
     *      <ngx-column *ngFor="let key of table.modelColumnKeys"></ngx-column>
     *    </table-builder>
     *    ------------------------
     *    modelColumnKeys === [ 'id', 'hello', 'value' ]
     */
    modelColumnKeys: string[];
    /**
     * @description: the custom names of the column list to be displayed in the view.
     * @example:
     *    <table-builder [keys]=[ 'id', 'description', 'name', 'description' ] />
     *    customModelColumnsKeys === [ 'id', 'description', 'name', 'description' ]
     *    ------------------------
     *    <table-builder [keys]=[ 'id', 'description', 'name', 'description' ] [exclude]=[ 'id', 'description' ] />
     *    customModelColumnsKeys === [ 'name' ]
     */
    customModelColumnsKeys: string[];
    isDragging: PlainObjectOf<boolean>;
    accessDragging: boolean;
    filteringRun: boolean;
    /**
     * @description - <table-builder [keys]=[ 'id', 'value', 'id', 'position', 'value' ] />
     * returned unique displayed columns [ 'id', 'value', 'position' ]
     */
    get displayedColumns(): string[];
    get visibleColumns(): string[];
    /**
     * @description - <table-builder [keys]=[ 'id', 'value', 'id', 'position', 'value' ] />
     * returned ordered displayed columns [ 'id', 'value', 'id', 'position', 'value' ]
     */
    get positionColumns(): string[];
    get columnSchema(): ColumnsSchema[];
    /**
     * todo caretaker note
     * @deprecated - remove in v13
     * remove and replace with AbstractTableBuilderApiDirective#getSelectedItems
     * while table refactoring
     */
    get selectedItems(): T[];
    get selectionModel(): SelectionMap<T>;
    get clientRowHeight(): number;
    get columnVirtualHeight(): number;
    get columnHeight(): number;
    get headLineHeight(): number;
    get size(): number;
    /**
     * @description Returns a list of displayed table entries, including filters and sorting.
     */
    get sourceRef(): T[];
    get firstItem(): T;
    get lastItem(): T;
    /**
     * @description Returns the entire list of table entries, excluding filters and sorting.
     */
    get originalSourceRef(): T[];
    get isEnableFiltering(): boolean;
    get isSkippedInternalSort(): boolean;
    get isEnableAutoWidthColumn(): boolean;
    get isEnableSelection(): boolean;
    set headHeight(val: string | number);
    set rowHeight(val: Nullable<string | number>);
    private get shouldBeFiltered();
    private get shouldBeSorted();
    private get expanded();
    abstract setSource(source: Nullable<T[]>): void;
    abstract markDirtyCheck(): void;
    abstract markForCheck(): void;
    abstract markTemplateContentCheck(): void;
    abstract ngOnChanges(changes: SimpleChanges): void;
    abstract ngOnInit(): void;
    abstract ngAfterContentInit(): void;
    abstract ngAfterViewInit(): void;
    abstract ngAfterViewChecked(): void;
    abstract ngOnDestroy(): void;
    abstract calculateViewport(force: boolean): void;
    protected abstract updateViewportInfo(start: number, end: number): void;
    recheckViewportChecked(): void;
    enableDragging(key: Nullable<string>): void;
    disableDragging(): void;
    resizeColumn({ event, key }: ResizeEvent, column: HTMLDivElement): void;
    filter(after?: Fn): void;
    sortAndFilter(): Promise<void>;
    sortByKey(key: string): void;
    drop({ previousIndex, currentIndex }: CdkDragSortEvent): void;
    changeSchema(defaultColumns?: Nullable<DeepPartial<ColumnsSchema>[]>): void;
    idleDetectChanges(): void;
    getSelectedItems(): T[];
    protected reCheckDefinitions(): void;
    protected forceCalculateViewport(): void;
    /**
     * @description: returns the number of keys in the model
     * @example: <table-builder [source]=[{ id: 1, name: 'hello' }, ...] /> a value of 2 will be returned
     */
    protected getCountKeys(): number;
    /**
     * @see AbstractTableBuilderApiDirective#customModelColumnsKeys for further information
     */
    protected generateCustomModelColumnsKeys(): string[];
    /**
     * @see AbstractTableBuilderApiDirective#modelColumnKeys for further information
     */
    protected generateModelColumnKeys(): string[];
    protected getModelKeys(): string[];
    protected calculateColumnWidthSummary(): void;
    private sortAndFilterOriginalSource;
    private calculateWidth;
    private afterCalculateWidth;
    private onMouseResizeColumn;
    private excluding;
    static ɵfac: i0.ɵɵFactoryDeclaration<AbstractTableBuilderApiDirective<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractTableBuilderApiDirective<any>, never, never, { "height": "height"; "width": "width"; "source": "source"; "keys": "keys"; "striped": "striped"; "name": "name"; "skipSort": "skip-sort"; "sortTypes": "sort-types"; "filterDefinition": "filter-definition"; "excludeKeys": "exclude-keys"; "autoWidth": "auto-width"; "autoHeightDetect": "auto-height"; "nativeScrollbar": "native-scrollbar"; "primaryKey": "primary-key"; "verticalBorder": "vertical-border"; "enableSelection": "enable-selection"; "enableFiltering": "enable-filtering"; "produceDisableFn": "produce-disable-fn"; "rowCssClasses": "row-css-classes"; "schemaColumns": "schema-columns"; "schemaVersion": "schema-version"; "headHeight": "head-height"; "rowHeight": "row-height"; }, { "afterRendered": "afterRendered"; "schemaChanges": "schemaChanges"; "onChanges": "onChanges"; "sortChanges": "sortChanges"; }, ["columnOptions", "contextMenuTemplate", "ngxEmptyContent", "headerTemplate", "footerTemplate", "filterTemplate", "columnTemplates"]>;
}
//# sourceMappingURL=abstract-table-builder-api.directive.d.ts.map