import { ElementRef, OnInit, EventEmitter, Renderer } from '@angular/core';
import * as moment from 'moment';
import { BehaviorSubject } from 'rxjs';
export declare type IDatePickerInputEvent = IDatePickerInputDateEvent | IDatePickerInputActionEvent;
export declare type IDatePickerOutputEvent = IDatePickerOutputDefaultEvent | IDatePickerOutputChangedEvent | IDatePickerOutputInvalidEvent | IDatePickerOutputClearedEvent;
export interface IDatePickerInputDateEvent {
    type: "setDate";
    data: string;
}
export interface IDatePickerInputActionEvent {
    type: "action";
    data: "toggle" | "close" | "open";
}
export interface IDatePickerOutputDefaultEvent {
    type: "default";
    data: "init" | "opened" | "closed";
}
export interface IDatePickerOutputChangedEvent {
    type: "dateChanged";
    data: moment.Moment;
}
export interface IDatePickerOutputInvalidEvent {
    type: "dateInvalid";
    data: string;
}
export interface IDatePickerOutputClearedEvent {
    type: "dateCleared";
    data: string;
}
export declare class DatePickerOptions {
    firstWeekdaySunday?: boolean;
    format?: string;
    constructor(obj?: DatePickerOptions);
}
export interface ICalendarDate {
    day: number | null;
    month: number | null;
    year: number | null;
    enabled: boolean;
    today: boolean;
    selected: boolean;
    momentObj: moment.Moment;
}
export declare class DatePickerComponent implements OnInit {
    private readonly renderer;
    options: DatePickerOptions;
    inputEvents: EventEmitter<IDatePickerInputEvent>;
    outputEvents: EventEmitter<IDatePickerOutputEvent>;
    id: string;
    description: string;
    opened: boolean;
    days: ICalendarDate[];
    constructor(renderer: Renderer);
    private validInputFormats;
    private dateModelValue;
    private modelValue;
    model: string;
    dateModel: moment.Moment | null;
    readonly currentDate: moment.Moment;
    private eventsSub;
    private validateDate(newValue);
    setDateIfChanged(newDate: moment.Moment): void;
    inputChanged(newValue: string): void;
    ngOnInit(): void;
    generateCalendar(): void;
    setValue(date: moment.Moment | null): void;
    private formatDate(date);
    selectDate(date: moment.Moment | null, e?: MouseEvent): void;
    writeValue(date: moment.Moment): void;
    prevMonth(): void;
    nextMonth(): void;
    prevYear(): void;
    nextYear(): void;
    today(): void;
    toggle(): void;
    private open;
    private close;
    clear(): void;
    todayMsg: string;
    clearMsg: string;
    private bSubject;
    private sub;
    readonly subject: BehaviorSubject<string>;
    ngOnDestroy(): void;
    inputField: ElementRef;
    focus(): boolean;
}
