import * as React from 'react';
import { BaseProps } from "../../../utils/types";
import { Size, Day, View, Events } from "./types";
declare type OnHover = React.MouseEvent<HTMLSpanElement> | React.MouseEvent<HTMLDivElement>;
interface hoveredDateProps {
    value: number;
    isToday: boolean;
    isDisabled: boolean;
    todayDate?: Date;
    fullDate: Date;
    date: number;
    month: string;
    year: number;
    dayName: string;
}
interface hoveredMonthProps {
    value: string;
    month: string;
    year?: number;
    isCurrentMonth: boolean;
    isDisabled: boolean;
}
interface hoveredYearProps {
    value: number;
    year: number;
    isCurrentYear: boolean;
    isDisabled: boolean;
}
export interface SharedProps extends BaseProps {
    size: Size;
    monthsInView: number;
    jumpView?: boolean;
    firstDayOfWeek: Day;
    view: View;
    disabledBefore?: Date;
    disabledAfter?: Date;
    yearNav?: number;
    monthNav?: number;
    allowReverseSelection?: boolean;
    'aria-label'?: string;
    'aria-labelledby'?: string;
}
export declare type CalendarProps = {
    onDateChange?: (date: Date) => void;
    onRangeChange?: (startDate: Date | undefined, endDate: Date | undefined) => void;
    onDateHover?: (dateData: hoveredDateProps, evnt: OnHover) => void;
    onMonthHover?: (monthData: hoveredMonthProps, evnt: OnHover) => void;
    onYearHover?: (yearData: hoveredYearProps, evnt: OnHover) => void;
    date?: Date;
    rangePicker?: boolean;
    startDate?: Date;
    endDate?: Date;
    rangeLimit?: number;
    events?: Events;
} & SharedProps;
interface CalendarState {
    view: View;
    year?: number;
    month?: number;
    date?: number;
    currDate?: Date;
    hoverDate?: Date;
    startDate?: Date;
    endDate?: Date;
    yearBlockNav: number;
    yearNav: number;
    monthNav: number;
    todayDate: number;
    currMonth: number;
    currYear: number;
    focusedDateRow?: number;
    focusedDateCol?: number;
    focusedDateMonthIndex?: number;
    focusedMonth?: number;
    focusedYearIndex?: number;
}
export declare class Calendar extends React.Component<CalendarProps, CalendarState> {
    static defaultProps: {
        size: string;
        monthsInView: number;
        view: string;
        firstDayOfWeek: string;
        jumpView: boolean;
    };
    calendarWrapperRef: React.RefObject<HTMLDivElement>;
    constructor(props: CalendarProps);
    componentDidUpdate(prevProps: CalendarProps, prevState: CalendarState): void;
    updateState: (year: number, month?: number | undefined, date?: number | undefined) => void;
    getDateValue: (year: number, month: number, date: number) => Date | undefined;
    getNavDateInfo: (index: number) => Record<string, any>;
    getDateGridPosition: (year: number, month: number, date: number) => {
        row: number;
        col: number;
    } | null;
    getInRangeError: () => boolean;
    selectYear: (year: number) => () => void;
    yearMouseOverHandler: (year: number, isCurrentYear: boolean, isDisabled: boolean, ev: React.MouseEvent<HTMLButtonElement>) => void;
    selectMonth: (month: number) => () => void;
    monthMouseOverHandler: (month: number, isCurrentMonth: boolean, isDisabled: boolean, ev: React.MouseEvent<HTMLButtonElement>) => void;
    selectDate: (index: number, date: number, prevMonthDayRange: number, dayRange: number) => void;
    calculateDate: (index: number, date: number, prevMonthDayRange: number, dayRange: number, isDateHovered: boolean) => Date | undefined;
    onNavIconClickHandler: (type: string) => () => void;
    renderJumpButton: (type: string) => React.JSX.Element;
    onNavHeadingClickHandler: (currView: View) => () => void;
    renderHeaderContent: (index: number) => React.JSX.Element;
    renderBodyYear: () => React.JSX.Element[];
    renderBodyMonth: () => React.JSX.Element[];
    onDateRowMouseLeaveHandler: () => void;
    handleMonthCellKeyDown: (event: React.KeyboardEvent, _month: number, disabled: boolean) => void;
    handleYearCellKeyDown: (event: React.KeyboardEvent, _year: number, _offset: number, disabled: boolean) => void;
    handleDateCellKeyDown: (ev: React.KeyboardEvent, index: number, row: number, col: number, noOfRows: number, date: number, prevMonthDayRange: number, dayRange: number, inRangeError: boolean, rangePicker: boolean, startDate?: Date | undefined, endDate?: Date | undefined) => void;
    renderBodyDate: (index: number) => React.JSX.Element;
    renderEventsIndicator(size: string, active: boolean): React.JSX.Element;
    renderDateValues: (index: number) => React.JSX.Element[];
    renderCalendar: (index: number) => React.JSX.Element;
    render(): React.JSX.Element;
}
export default Calendar;
