import { BooleanInput } from '@angular/cdk/coercion';
import { ChangeDetectorRef, ElementRef, EventEmitter, OnInit } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { Destroy } from '@deja-js/component/core';
import { IDateSelectorItem } from './date-selector-item.model';
import * as i0 from "@angular/core";
export declare enum DaysOfWeek {
    Sunday = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6
}
export declare enum DateComponentLayout {
    dateonly = 1,
    datetime = 2,
    timeonly = 3
}
export declare class DejaDateSelectorComponent extends Destroy implements OnInit, ControlValueAccessor {
    private changeDetectorRef;
    _control: NgControl;
    startDay: DaysOfWeek;
    disableDates: Array<(DaysOfWeek | Date)>;
    dateMax: Date;
    dateMin: Date;
    format: string;
    readonly dateChange: EventEmitter<any>;
    readonly timeChange: EventEmitter<any>;
    _local: string;
    layoutClass: string;
    layoutId: number;
    zeroHourDate: Date;
    private _keyboardNavigation;
    private _keyboardNavigation$;
    get keyboardNavigation(): boolean;
    get displayedDate(): Date;
    get local(): string;
    private _currentDays;
    private _currentDate;
    private selectedDate;
    private _displayedDate;
    private _days;
    private _emptyDays;
    private _time;
    private _disabled;
    /**
     * Component Layout
     */
    set layout(value: DateComponentLayout | string);
    /**
     * Time property setter. Can be string or empty so you can use it like : <deja-date-selector time></deja-date-selector>
     * Used to add time selector next to calendar
     */
    set time(value: BooleanInput);
    /** Time property getter. */
    get time(): BooleanInput;
    get days(): string[];
    get emptyDays(): number[];
    get currentDate(): Date;
    get currentDays(): IDateSelectorItem[];
    /** Disabled property setter. Can be string or empty so you can use it like : <deja-date-selector disabled></deja-date-selector> */
    set disabled(value: BooleanInput);
    /** Disabled property getter. */
    get disabled(): BooleanInput;
    constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, _control: NgControl);
    ngOnInit(): void;
    set value(v: Date);
    get value(): Date;
    writeValue(value: Date | string): void;
    registerOnChange(fn: (_a: unknown) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    /**
     * @param month (attention : Janvier = 0, Décembre = 11)
     * @param year
     * @return Jours du mois au format IDateSelectorItem
     */
    getAllDaysInMonth(month: number, year: number): IDateSelectorItem[];
    daysInMonth(month: number, year: number): number;
    keyDown(event: KeyboardEvent): boolean;
    changeMonth(x: number): boolean;
    changeYear(x: number): boolean;
    updateTime(hours: Date): void;
    getDisplayedDate(): string;
    getSelectedDate(): string;
    onTouchedCallback: () => void;
    onChangeCallback: (_a?: unknown) => void;
    private getDateLabel;
    private bind;
    /**
     * Vérifie si la date passée en param est désactivée.
     *
     * @param date
     * @return sera false si this.disableDates n'existe pas / n'est pas un tableau,
     *         si la date envoyée en param est valide,
     *         si la date est superieure a dateMax
     *         ou si la date est inférieure a dateMin
     */
    private isDisabledDate;
    /**
     * Fonction récursive. Si le jour séléctionné + num est invalide, la fonction
     * se rappelle pour séléctionner le jour suivant (ou précédent)
     *
     * @param date
     * @param num : nombre de jours à ajouter à date.
     */
    private setDateIfPossible;
    /**
     * Fonction récursive. Si le mois séléctionné + num est invalide, la fonction
     * se rappelle pour séléctionner le jour suivant (ou précédent)
     *
     * @param date
     * @param num : nombre de mois à ajouter à date.
     */
    private setMonthIfPossible;
    /**
     * Fonction récursive. Si l'année séléctionné + num est invalide, la fonction
     * se rappelle pour séléctionner le jour suivant (ou précédent)
     *
     * @param date
     * @param num : nombre de jours à ajouter à date.
     */
    private setYearIfPossible;
    static ɵfac: i0.ɵɵFactoryDeclaration<DejaDateSelectorComponent, [null, null, { optional: true; self: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DejaDateSelectorComponent, "deja-date-time-selector", never, { "startDay": "startDay"; "disableDates": "disableDates"; "dateMax": "dateMax"; "dateMin": "dateMin"; "format": "format"; "layout": "layout"; "time": "time"; "disabled": "disabled"; }, { "dateChange": "dateChange"; "timeChange": "timeChange"; }, never, never>;
}
