import { ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
import { DateTime } from 'luxon';
import { BehaviorSubject } from 'rxjs';
import { Dictionary } from 'lodash';
import * as i0 from "@angular/core";
export type IDatePickerInputEvent = IDatePickerInputDateEvent | IDatePickerInputActionEvent;
export 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: DateTime;
}
export interface IDatePickerOutputInvalidEvent {
    type: 'dateInvalid';
    data: string;
}
export interface IDatePickerOutputClearedEvent {
    type: 'dateCleared';
    data: string;
}
export declare class DatePickerOptions {
    firstWeekdaySunday?: boolean;
    format: string;
    class?: string;
    constructor(obj?: DatePickerOptions);
}
export interface ICalendarDate {
    day: number | null;
    month: number | null;
    year: number | null;
    enabled: boolean;
    today: boolean;
    selected: boolean;
    dateTime: DateTime;
}
export declare class DatePickerComponent implements OnInit, OnDestroy {
    options: DatePickerOptions;
    inputEvents: EventEmitter<IDatePickerInputEvent>;
    outputEvents: EventEmitter<IDatePickerOutputEvent>;
    id: string;
    description: string;
    opened: boolean;
    days: ICalendarDate[];
    inputField?: ElementRef;
    constructor();
    private validInputFormats;
    private dateModelValue;
    private modelValue;
    private bSubject?;
    private sub?;
    set model(s: string);
    get model(): string;
    get currentDate(): DateTime;
    set dateModel(date: DateTime | null);
    get dateModel(): DateTime | null;
    private eventsSub?;
    private validateDate;
    setDateIfChanged(newDate: DateTime): void;
    inputChanged(newValue: string): void;
    ngOnInit(): void;
    private isSame;
    generateCalendar(): void;
    setValue(date: DateTime | null): void;
    private formatDate;
    selectDate(date: DateTime | null, e?: MouseEvent): void;
    writeValue(date: DateTime): void;
    prevMonth(): void;
    nextMonth(): void;
    prevYear(): void;
    nextYear(): void;
    today(): void;
    toggle(): void;
    private open;
    private close;
    clear(): void;
    get subject(): BehaviorSubject<string>;
    classes(): Dictionary<boolean | null>;
    ngOnDestroy(): void;
    focus(): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "nof-date-picker", never, { "options": { "alias": "options"; "required": true; }; "inputEvents": { "alias": "inputEvents"; "required": true; }; "id": { "alias": "id"; "required": true; }; "description": { "alias": "description"; "required": true; }; }, { "outputEvents": "outputEvents"; }, never, never, false, never>;
}
