import { ElementRef, InjectionToken, OnDestroy } from '@angular/core';
import { ControlValueAccessor, ValidationErrors, Validator, ValidatorFn } from '@angular/forms';
import { Type } from '@angular/core/src/type';
import { Observable } from 'rxjs';
import { NbDateService } from '../calendar-kit';
export declare abstract class NbDatepickerAdapter<D> {
    abstract picker: Type<any>;
    abstract parse(value: string, format: string): D;
    abstract format(value: D, format: string): string;
    abstract isValid(value: string, format: string): boolean;
}
export interface NbPickerValidatorConfig<D> {
    min: D;
    max: D;
    filter: (D: any) => boolean;
}
export declare abstract class NbDatepicker<T> {
    abstract format: string;
    abstract value: T;
    abstract readonly valueChange: Observable<T>;
    abstract attach(hostRef: ElementRef): any;
    abstract getValidatorConfig(): NbPickerValidatorConfig<T>;
    abstract show(): any;
    abstract hide(): any;
    abstract shouldHide(): boolean;
    abstract readonly isShown: boolean;
    abstract readonly blur: Observable<void>;
}
export declare const NB_DATE_ADAPTER: InjectionToken<NbDatepickerAdapter<any>>;
export declare class NbDatepickerDirective<D> implements OnDestroy, ControlValueAccessor, Validator {
    protected document: any;
    protected datepickerAdapters: NbDatepickerAdapter<D>[];
    protected hostRef: ElementRef;
    protected dateService: NbDateService<D>;
    setPicker: NbDatepicker<D>;
    protected datepickerAdapter: NbDatepickerAdapter<D>;
    protected picker: NbDatepicker<D>;
    protected alive: boolean;
    protected onChange: (D: any) => void;
    protected onTouched: () => void;
    protected validator: ValidatorFn;
    constructor(document: any, datepickerAdapters: NbDatepickerAdapter<D>[], hostRef: ElementRef, dateService: NbDateService<D>);
    readonly input: HTMLInputElement;
    readonly inputValue: string;
    ngOnDestroy(): void;
    writeValue(value: D): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState(isDisabled: boolean): void;
    validate(): ValidationErrors | null;
    protected hidePicker(): void;
    protected parseValidator(): ValidationErrors | null;
    protected minValidator(): ValidationErrors | null;
    protected maxValidator(): ValidationErrors | null;
    protected filterValidator(): ValidationErrors | null;
    protected chooseDatepickerAdapter(): void;
    protected setupPicker(): void;
    protected writePicker(value: D): void;
    protected writeInput(value: D): void;
    protected noDatepickerAdapterProvided(): boolean;
    protected subscribeOnInputChange(): void;
    protected handleInputChange(value: string): void;
    protected parseInputValue(value: any): D | null;
}
