import { ComponentFactoryResolver, ComponentRef, OnChanges, ElementRef, EventEmitter, OnDestroy, Type, AfterViewInit, OnInit, SimpleChanges } from '@angular/core';
import { Observable, ReplaySubject, Subject } from 'rxjs';
import { RCalendarCell, RCalendarSize, RCalendarSizeValues, RCalendarViewMode, RCalendarViewModeValues } from '../../extra/calendar-kit/model';
import { Overlay, OverlayPositionBuilder, OverlayRef } from '@angular/cdk/overlay';
import { RTriggerStrategy, RTriggerStrategyBuilderService } from '../../../cdk/overlay/overlay-trigger';
import { RDateService } from '../../extra/calendar-kit';
import { RCalendarComponent, RCalendarRange, RCalendarRangeComponent } from '../../extra/calendar';
import { RDatepicker, RPickerValidatorConfig } from './datepicker.directive';
import { RDatepickerContainerComponent } from './datepicker-container.component';
/**
 * The `RBasePicker` component concentrates overlay manipulation logic.
 * */
export declare abstract class RBasePicker<D, T, P> extends RDatepicker<T> {
    protected overlay: Overlay;
    protected positionBuilder: OverlayPositionBuilder;
    protected triggerStrategyBuilder: RTriggerStrategyBuilderService;
    protected cfr: ComponentFactoryResolver;
    protected dateService: RDateService<D>;
    protected dateServiceOptions: any;
    /**
     * Datepicker date format. Can be used only with date adapters (moment, date-fns) since native date
     * object doesn't support formatting.
     * */
    abstract format: string;
    /**
     * Defines if we should render previous and next months
     * in the current month view.
     * */
    abstract boundingMonth: boolean;
    /**
     * Defines starting view for calendar.
     * */
    abstract startView: RCalendarViewMode;
    /**
     * Minimum available date for selection.
     * */
    abstract min: T;
    /**
     * Maximum available date for selection.
     * */
    abstract max: T;
    /**
     * Predicate that decides which cells will be disabled.
     * */
    abstract filter: (T: any) => boolean;
    /**
     * Custom day cell component. Have to implement `RCalendarCell` interface.
     * */
    abstract dayCellComponent: Type<RCalendarCell<D, T>>;
    /**
     * Custom month cell component. Have to implement `RCalendarCell` interface.
     * */
    abstract monthCellComponent: Type<RCalendarCell<D, T>>;
    /**
     * Custom year cell component. Have to implement `RCalendarCell` interface.
     * */
    abstract yearCellComponent: Type<RCalendarCell<D, T>>;
    /**
     * Size of the calendar and entire components.
     * Can be 'medium' which is default or 'large'.
     * */
    abstract size: RCalendarSize;
    /**
     * Depending on this date a particular month is selected in the calendar
     */
    abstract visibleDate: D;
    /**
     * Hide picker when a date or a range is selected, `true` by default
     * @type {boolean}
     */
    abstract hideOnSelect: boolean;
    /**
     * Determines should we show calendar navigation or not.
     * @type {boolean}
     */
    abstract showNavigation: boolean;
    /**
     * Sets symbol used as a header for week numbers column
     * */
    abstract weekNumberSymbol: string;
    /**
     * Determines should we show week numbers column.
     * False by default.
     * */
    abstract showWeekNumber: boolean;
    /**
     * Calendar component class that has to be instantiated inside overlay.
     * */
    protected abstract pickerClass: Type<P>;
    /**
     * Overlay reference object.
     * */
    protected ref: OverlayRef;
    /**
     * Datepicker container that contains instantiated picker.
     * */
    protected container: ComponentRef<RDatepickerContainerComponent>;
    /**
     * Positioning strategy used by overlay.
     * */
    protected positionStrategy: any;
    /**
     * Trigger strategy used by overlay
     * */
    protected triggerStrategy: RTriggerStrategy;
    /**
     * HTML input reference to which datepicker connected.
     * */
    protected hostRef: ElementRef;
    protected init$: ReplaySubject<void>;
    /**
     * Stream of picker changes. Required to be the subject because picker hides and shows and picker
     * change stream becomes recreated.
     * */
    protected onChange$: Subject<T>;
    /**
     * Reference to the picker instance itself.
     * */
    protected pickerRef: ComponentRef<any>;
    protected overlayOffset: number;
    protected destroy$: Subject<void>;
    /**
     * Queue contains the last value that was applied to the picker when it was hidden.
     * This value will be passed to the picker as soon as it shown.
     * */
    protected queue: T | undefined;
    protected blur$: Subject<void>;
    protected constructor(overlay: Overlay, positionBuilder: OverlayPositionBuilder, triggerStrategyBuilder: RTriggerStrategyBuilderService, cfr: ComponentFactoryResolver, dateService: RDateService<D>, dateServiceOptions: any);
    /**
     * Returns picker instance.
     * */
    get picker(): any;
    /**
     * Stream of picker value changes.
     * */
    get valueChange(): Observable<T>;
    get isShown(): boolean;
    get init(): Observable<void>;
    /**
     * Emits when datepicker looses focus.
     */
    get blur(): Observable<void>;
    protected abstract get pickerValueChange(): Observable<T>;
    /**
     * Datepicker knows nothing about host html input element.
     * So, attach method attaches datepicker to the host input element.
     * */
    attach(hostRef: ElementRef): void;
    getValidatorConfig(): RPickerValidatorConfig<T>;
    show(): void;
    shouldHide(): boolean;
    hide(): void;
    protected abstract writeQueue(): any;
    protected createOverlay(): void;
    protected openDatepicker(): void;
    protected createPositionStrategy(): import("@angular/cdk/overlay").FlexibleConnectedPositionStrategy;
    protected subscribeOnPositionChange(): void;
    protected createTriggerStrategy(): RTriggerStrategy;
    protected getContainer(): ComponentRef<any>;
    protected subscribeOnTriggers(): void;
    protected instantiatePicker(): void;
    /**
     * Subscribes on picker value changes and emit data through this.onChange$ subject.
     * */
    protected subscribeOnValueChange(): void;
    protected patchWithInputs(): void;
    protected checkFormat(): void;
}
export declare class RBasePickerComponent<D, T, P> extends RBasePicker<D, T, P> implements OnInit, OnChanges, AfterViewInit, OnDestroy {
    /**
     * Datepicker date format. Can be used only with date adapters (moment, date-fns) since native date
     * object doesn't support formatting.
     * */
    format: string;
    /**
     * Defines if we should render previous and next months
     * in the current month view.
     * */
    boundingMonth: boolean;
    /**
     * Defines starting view for calendar.
     * */
    startView: RCalendarViewMode;
    static ngAcceptInputType_startView: RCalendarViewModeValues;
    /**
     * Minimum available date for selection.
     * */
    min: T;
    /**
     * Maximum available date for selection.
     * */
    max: T;
    /**
     * Predicate that decides which cells will be disabled.
     * */
    filter: (T: any) => boolean;
    /**
     * Custom day cell component. Have to implement `RCalendarCell` interface.
     * */
    dayCellComponent: Type<RCalendarCell<D, T>>;
    /**
     * Custom month cell component. Have to implement `RCalendarCell` interface.
     * */
    monthCellComponent: Type<RCalendarCell<D, T>>;
    /**
     * Custom year cell component. Have to implement `RCalendarCell` interface.
     * */
    yearCellComponent: Type<RCalendarCell<D, T>>;
    /**
     * Size of the calendar and entire components.
     * Can be 'medium' which is default or 'large'.
     * */
    size: RCalendarSize;
    static ngAcceptInputType_size: RCalendarSizeValues;
    /**
     * Depending on this date a particular month is selected in the calendar
     */
    visibleDate: D;
    /**
     * Hide picker when a date or a range is selected, `true` by default
     * @type {boolean}
     */
    hideOnSelect: boolean;
    /**
     * Determines should we show calendars navigation or not.
     * @type {boolean}
     */
    showNavigation: boolean;
    /**
     * Sets symbol used as a header for week numbers column
     * */
    weekNumberSymbol: string;
    /**
     * Determines should we show week numbers column.
     * False by default.
     * */
    get showWeekNumber(): boolean;
    set showWeekNumber(value: boolean);
    protected _showWeekNumber: boolean;
    static ngAcceptInputType_showWeekNumber: any;
    /**
     * Determines picker overlay offset (in pixels).
     * */
    overlayOffset: number;
    constructor(document: any, positionBuilder: OverlayPositionBuilder, triggerStrategyBuilder: RTriggerStrategyBuilderService, overlay: Overlay, cfr: ComponentFactoryResolver, dateService: RDateService<D>, dateServiceOptions: any);
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    protected pickerClass: Type<P>;
    protected get pickerValueChange(): Observable<T>;
    get value(): T;
    set value(value: T);
    protected writeQueue(): void;
}
/**
 * The DatePicker components itself.
 * Provides a proxy to `RCalendar` options as well as custom picker options.
 */
export declare class RDatepickerComponent<D> extends RBasePickerComponent<D, D, RCalendarComponent<D>> {
    protected pickerClass: Type<RCalendarComponent<D>>;
    /**
     * Date which will be rendered as selected.
     * */
    set date(date: D);
    /**
     * Emits date when selected.
     * */
    get dateChange(): EventEmitter<D>;
    get value(): D;
    set value(date: D);
    protected get pickerValueChange(): Observable<D>;
    protected writeQueue(): void;
}
/**
 * The RangeDatePicker components itself.
 * Provides a proxy to `RCalendarRange` options as well as custom picker options.
 */
export declare class RRangepickerComponent<D> extends RBasePickerComponent<D, RCalendarRange<D>, RCalendarRangeComponent<D>> {
    protected pickerClass: Type<RCalendarRangeComponent<D>>;
    /**
     * Range which will be rendered as selected.
     * */
    set range(range: RCalendarRange<D>);
    /**
     * Emits range when start selected and emits again when end selected.
     * */
    get rangeChange(): EventEmitter<RCalendarRange<D>>;
    get value(): RCalendarRange<D>;
    set value(range: RCalendarRange<D>);
    protected get pickerValueChange(): Observable<RCalendarRange<D>>;
    shouldHide(): boolean;
    protected writeQueue(): void;
}
