import ModulDate from './../../../../utils/modul-date/modul-date';
import { RangeDate, SingleDate } from './abstract-calendar-state';
export declare enum CalendarEvent {
    DAY_SELECT = "day-select",
    DAY_MOUSE_ENTER = "day-mouse-enter",
    DAY_MOUSE_LEAVE = "day-mouse-leave",
    DAY_KEYBOARD_TAB = "day-keyboard-tab",
    MONTH_SELECT = "month-select",
    MONTH_NEXT = "month-next",
    MONTH_PREVIOUS = "month-previous",
    YEAR_SELECT = "year-select",
    YEAR_NEXT = "year-next",
    YEAR_PREVIOUS = "year-previous",
    YEAR_MONTH_SELECT = "year-month-select"
}
export declare enum CalendarType {
    SINGLE_DATE = "single-date",
    DATE_RANGE = "date-range"
}
export declare type DaySelectCallBack = (date: SingleDate | RangeDate) => void;
export default interface CalendarState {
    buildCurrentCalendar(): CalendarCurrentState;
    onDateSelect(callback: DaySelectCallBack): void;
    updateState(value: SingleDate | RangeDate, minDate?: string, maxDate?: string): void;
}
export interface CalendarCurrentState {
    calendar: Calendar;
    calendarEvents: CalendarEvents;
}
export interface Calendar {
    value?: SingleDate | RangeDate;
    dates: {
        min: ModulDate;
        current: ModulDate;
        max: ModulDate;
    };
    years: YearState[];
    months: MonthState[];
    yearsMonths: YearMonthState[];
    days: DayState[];
    type?: CalendarType;
}
export interface CalendarEvents {
    [CalendarEvent.DAY_SELECT]: (event: DayState) => void;
    [CalendarEvent.DAY_MOUSE_ENTER]: (event: DayState) => void;
    [CalendarEvent.DAY_MOUSE_LEAVE]: (event: DayState) => void;
    [CalendarEvent.DAY_KEYBOARD_TAB]: (event: DayState) => void;
    [CalendarEvent.MONTH_SELECT]: (event: MonthState) => void;
    [CalendarEvent.MONTH_PREVIOUS]: (event: Event) => void;
    [CalendarEvent.MONTH_NEXT]: (event: Event) => void;
    [CalendarEvent.YEAR_SELECT]: (event: YearState) => void;
    [CalendarEvent.YEAR_PREVIOUS]: (event: Event) => void;
    [CalendarEvent.YEAR_NEXT]: (event: Event) => void;
    [CalendarEvent.YEAR_MONTH_SELECT]: (event: Event) => void;
}
export interface YearState {
    year: number;
    isCurrent: boolean;
}
export interface MonthState {
    month: number;
    isCurrent: boolean;
    isDisabled: boolean;
}
export interface YearMonthState {
    year: YearState;
    months: MonthState[];
}
export interface DayState {
    date: ModulDate;
    day: number;
    month: number;
    year: number;
    isDisabled: boolean;
    isToday: boolean;
    isSelected: boolean;
    isSelectionStart: boolean;
    isSelectionEnd: boolean;
    isInPreviousMonth: boolean;
    isInNextMonth: boolean;
    isHighlighted: boolean;
    hasFocus: boolean;
}
//# sourceMappingURL=calendar-state.d.ts.map