import { ComponentFactoryResolver, ComponentRef, OnChanges, ElementRef, EventEmitter, OnDestroy, Type } from '@angular/core';
import { Observable, Subject } from 'rxjs';
import { NbAdjustableConnectedPositionStrategy, NbOverlayRef, NbOverlayService, NbPositionBuilderService, NbTriggerStrategy } from '../cdk';
import { NbDatepickerContainerComponent } from './datepicker-container.component';
import { NbCalendarRange, NbCalendarRangeComponent } from '../calendar/calendar-range.component';
import { NbCalendarComponent } from '../calendar/calendar.component';
import { NbCalendarCell, NbCalendarSize, NbCalendarViewMode, NbDateService } from '../calendar-kit';
import { NbDatepicker, NbPickerValidatorConfig } from './datepicker.directive';
export declare abstract class NbBasePicker<D, T, P> extends NbDatepicker<T> implements OnChanges, OnDestroy {
    protected document: any;
    protected positionBuilder: NbPositionBuilderService;
    protected overlay: NbOverlayService;
    protected cfr: ComponentFactoryResolver;
    protected dateService: NbDateService<D>;
    format: string;
    boundingMonth: boolean;
    startView: NbCalendarViewMode;
    min: T;
    max: T;
    filter: (T: any) => boolean;
    dayCellComponent: Type<NbCalendarCell<D, T>>;
    monthCellComponent: Type<NbCalendarCell<D, T>>;
    yearCellComponent: Type<NbCalendarCell<D, T>>;
    size: NbCalendarSize;
    visibleDate: D;
    hideOnSelect: boolean;
    protected abstract pickerClass: Type<P>;
    protected ref: NbOverlayRef;
    protected container: ComponentRef<NbDatepickerContainerComponent>;
    protected positionStrategy: NbAdjustableConnectedPositionStrategy;
    protected hostRef: ElementRef;
    protected onChange$: Subject<T>;
    protected pickerRef: ComponentRef<any>;
    protected alive: boolean;
    protected queue: T;
    protected blur$: Subject<void>;
    constructor(document: any, positionBuilder: NbPositionBuilderService, overlay: NbOverlayService, cfr: ComponentFactoryResolver, dateService: NbDateService<D>);
    readonly picker: any;
    readonly valueChange: Observable<T>;
    readonly isShown: boolean;
    readonly blur: Observable<void>;
    protected abstract readonly pickerValueChange: Observable<T>;
    ngOnChanges(): void;
    ngOnDestroy(): void;
    attach(hostRef: ElementRef): void;
    getValidatorConfig(): NbPickerValidatorConfig<T>;
    show(): void;
    shouldHide(): boolean;
    hide(): void;
    protected abstract writeQueue(): any;
    protected createPositionStrategy(): NbAdjustableConnectedPositionStrategy;
    protected subscribeOnPositionChange(): void;
    protected createTriggerStrategy(): NbTriggerStrategy;
    protected subscribeOnTriggers(): void;
    protected instantiatePicker(): void;
    protected subscribeOnValueChange(): void;
    protected patchWithInputs(): void;
}
export declare class NbDatepickerComponent<D> extends NbBasePicker<D, D, NbCalendarComponent<D>> {
    protected pickerClass: Type<NbCalendarComponent<D>>;
    date: D;
    readonly dateChange: EventEmitter<D>;
    value: D;
    protected readonly pickerValueChange: Observable<D>;
    protected writeQueue(): void;
}
export declare class NbRangepickerComponent<D> extends NbBasePicker<D, NbCalendarRange<D>, NbCalendarRangeComponent<D>> {
    protected pickerClass: Type<NbCalendarRangeComponent<D>>;
    range: NbCalendarRange<D>;
    readonly rangeChange: EventEmitter<NbCalendarRange<D>>;
    value: NbCalendarRange<D>;
    protected readonly pickerValueChange: Observable<NbCalendarRange<D>>;
    shouldHide(): boolean;
    protected writeQueue(): void;
}
