import { NgClass } from '@angular/common';
import { AfterViewInit, ApplicationRef, ElementRef, EnvironmentInjector, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges, TemplateRef } from '@angular/core';
import { DokuActiveSorter } from './table.interface';
import * as i0 from "@angular/core";
export declare class DokuTable implements AfterViewInit, OnChanges, OnDestroy, OnInit {
    private elementRef;
    private renderer;
    private ngZone;
    private envInjector;
    private appRef;
    private injector;
    /**
     * Initial active sorter for column.
     * @default undefined
     */
    activeSorter?: DokuActiveSorter;
    /**
     * The status of the data.
     *
     * - `loading`, will show loading content on the table body
     * - `empty`, will show no data content on the table body
     * - `error`, will show error content on the table body
     *
     * If status is `undefined`, it means data is provided.
     *
     * @default undefined
     */
    status?: 'loading' | 'empty' | 'error';
    /**
     * Custom text or template on the table body when status is `empty`.
     *
     * @default undefined
     */
    customNoData?: string | TemplateRef<unknown>;
    /**
     * Custom text or template on the table body when status is `loading`.
     *
     * @default undefined
     */
    customLoading?: string | TemplateRef<unknown>;
    /**
     * Custom text or template on the table body when status is `error`.
     */
    customError?: string | TemplateRef<unknown>;
    /**
     * Listen for column sort changes.
     */
    sortChange: EventEmitter<DokuActiveSorter | undefined>;
    protected _sortChange: EventEmitter<{
        activeSorter?: DokuActiveSorter | undefined;
        options?: {
            emitEvent?: boolean | undefined;
        } | undefined;
    }>;
    protected sortChange$: import("rxjs").Observable<{
        activeSorter?: DokuActiveSorter | undefined;
        options?: {
            emitEvent?: boolean | undefined;
        } | undefined;
    }>;
    private containerElement?;
    private filledElement?;
    private noDataElement?;
    private noDataContentRef?;
    private loadingElement?;
    private loadingContentRef?;
    private errorElement?;
    private errorContentRef?;
    private destroy$;
    constructor(elementRef: ElementRef, renderer: Renderer2, ngZone: NgZone, envInjector: EnvironmentInjector, appRef: ApplicationRef, injector: Injector);
    protected get classes(): NgClass['ngClass'];
    protected get totalColumn(): number;
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    /**
     * Change active sorter programmatically.
     * @param activeSorter Value of the active sorter. Provide `undefined` to clear sorter.
     * @param options.emitEvent Whether to emit an event for `sortChange`. Default is `true`.
     */
    changeActiveSorter(activeSorter?: DokuActiveSorter, options?: {
        emitEvent?: boolean;
    }): void;
    private onResize;
    private createContainer;
    private initNoDataElement;
    private handleCustomNoData;
    private resizeNoDataElementWidth;
    private initLoadingElement;
    private resizeLoadingElementWidth;
    private handleCustomLoading;
    private initErrorElement;
    private handleCustomError;
    private resizeErrorElementWidth;
    private handleBodyVisibilityByStatus;
    static ɵfac: i0.ɵɵFactoryDeclaration<DokuTable, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DokuTable, "[doku-table]", ["dokuTable"], { "activeSorter": "activeSorter"; "status": "status"; "customNoData": "customNoData"; "customLoading": "customLoading"; "customError": "customError"; }, { "sortChange": "sortChange"; }, never, never, true>;
}
