import ModulDate from './../../../../utils/modul-date/modul-date';
import CalendarState, { Calendar, CalendarCurrentState, CalendarEvents, CalendarType, DaySelectCallBack, DayState, MonthState, YearState } from './calendar-state';
export declare const MAX_DATE_OFFSET: number;
export declare const MIN_DATE_OFFSET: number;
export declare const FIRST_MONTH_INDEX: number;
export declare const LAST_MONTH_INDEX: number;
export declare const LAST_DAY_OF_WEEK_INDEX: number;
export declare const FIRST_DAY_OF_MONTH_INDEX: number;
export declare type SingleDate = string;
export interface RangeDate {
    begin?: string;
    end?: string;
}
export default abstract class AbstractCalendarState implements CalendarState {
    protected now: ModulDate;
    protected currentlyDisplayedDate: ModulDate;
    protected currentMinDate: ModulDate;
    protected currentMaxDate: ModulDate;
    protected minDate: string;
    protected maxDate: string;
    protected daySelectCallback: Function;
    private calendar;
    private events;
    private lastSelectedDate;
    constructor(value?: SingleDate | RangeDate, minDate?: string, maxDate?: string);
    abstract updateState(value: SingleDate | RangeDate, minDate?: string, maxDate?: string): void;
    buildCurrentCalendar(): CalendarCurrentState;
    onDateSelect(callback: DaySelectCallBack): void;
    protected abstract initCurrentValue(value?: SingleDate | RangeDate): void;
    protected abstract initCurrentlyDisplayedDate(): void;
    protected emitUpdate(data: SingleDate | RangeDate): void;
    /**
     * Updates the date used to display the calendar. If it's lower than the minimum date authorized, it's set to the minimum.
     * If it's higher than the maximum date authorized, it's set to the maximum
     *
     * @param year new value
     * @param month new value
     * @param day new value
     */
    protected updateCurrentlyDisplayedDate(year: number, month: number, day: number): void;
    protected selectDay(selectedDay: DayState): void;
    protected nextMonth(): void;
    protected previousMonth(): void;
    protected nextYear(): void;
    protected previousYear(): void;
    protected selectYear(year: YearState): void;
    protected selectYearMonth(year: YearState, month: MonthState): void;
    protected selectMonth(month: MonthState): void;
    protected initDates(value?: SingleDate | RangeDate, minDate?: string, maxDate?: string): void;
    protected assembleCalendar(): Calendar;
    protected assembleCalendarEvents(): CalendarEvents;
    protected abstract assembleValue(): SingleDate | RangeDate | undefined;
    protected abstract calendarType(): CalendarType;
    protected overrideCalendarEvents(events: CalendarEvents): CalendarEvents;
    protected selectedDayToDate(selectedDay: DayState): ModulDate;
    protected isDayDisabled(date: ModulDate): boolean;
    protected isDayToday(date: ModulDate): boolean;
    protected isInPreviousMonth(date: ModulDate): boolean;
    protected isInNextMonth(date: ModulDate): boolean;
    protected isDaySelected(_date: ModulDate): boolean;
    protected isHighlighted(_date: ModulDate): boolean;
    protected isSelectionStart(_date: ModulDate): boolean;
    protected isSelectionEnd(_date: ModulDate): boolean;
    protected hasFocus(date: ModulDate): boolean;
    protected currentlyDisplayedYear(): number;
    protected currentlyDisplayedMonth(): number;
    protected currentlyDisplayedDay(): number;
    private years;
    private months;
    private yearsMonths;
    private daysOfMonth;
    private initMaxDate;
    private initMinDate;
    private buildDaysList;
    private calculateStartDate;
    private calculateEndDate;
    private weekdayIndexOfFirstDayOfMonth;
    private weekdayIndexOfLastDayOfMonth;
    private daysInMonth;
    private calculateYearOffset;
}
//# sourceMappingURL=abstract-calendar-state.d.ts.map