import React from 'react';
import { Theme } from '../cn';
export declare type CalendarProps = {
    /**
     * Выбранная дата, в формате unix timestamp
     */
    value?: number;
    /**
     * Левая граница диапазона дат, в формате unix timestamp
     */
    selectedFrom?: number;
    /**
     * Правая граница диапазона дат, в формате unix timestamp
     */
    selectedTo?: number;
    /**
     * Левая граница дат, возможных для выбора, в формате unix timestamp
     */
    earlierLimit?: number;
    /**
     * Правая граница дат, возможных для выбора, в формате unix timestamp
     */
    laterLimit?: number;
    /**
     * Месяц, в формате unix timestamp
     */
    month?: number;
    /**
     * Обработчик смены даты
     */
    onValueChange?: (timestamp?: number, dateString?: string, isTriggeredByKeyboard?: boolean) => void;
    /**
     * Обработчик смены месяца
     */
    onMonthChange?: (month?: number) => void;
    /**
     * Тип форматирования даты при выводе
     */
    outputFormat?: string;
    /**
     * Список названий месяцев
     */
    months?: readonly string[];
    /**
     * Список названий дней недели
     */
    weekdays?: readonly string[];
    /**
     * Список выходных дней в виде unix timestamp, отсортированный по возрастанию
     */
    offDays?: readonly number[];
    /**
     * Список дней с событиями в виде unix timestamp, отсортированный по возрастанию
     */
    eventDays?: readonly number[];
    /**
     * Отображение текущей даты
     */
    showToday?: boolean;
    /**
     * Отображение стрелок навигации по месяцам
     */
    showArrows?: boolean;
    /**
     * Возможность управления календарём с клавиатуры
     */
    isKeyboard?: boolean;
    /**
     * Игнорировать различие часовых поясов клиента и сервера. Для корректного отображения offDays и eventDays
     * в том случае, если часовой пояс клиента отличается от часового пояса дат в offDays и eventDays
     */
    ignoreTimezone?: boolean;
    /**
     * Управление шириной календаря. При значении 'available' растягивает кнопку на ширину родителя
     */
    width?: 'default' | 'available';
    /**
     * Тема компонента
     */
    theme?: Theme;
    /**
     * Дополнительный класс
     */
    className?: string;
    /**
     * Идентификатор компонента в DOM
     */
    id?: string;
    /**
     * Обработчик события нажатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyDown?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик события отжатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyUp?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик фокуса
     */
    onFocus?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик снятия фокуса
     */
    onBlur?: (event?: React.FocusEvent<any>) => void;
    /**
     * Идентификатор для систем автоматизированного тестирования
     */
    'data-test-id'?: string;
};
declare type CalendarState = {
    isMonthSelection?: boolean;
    isYearSelection?: boolean;
    month: Date | number;
};
/**
 * Компонент календаря.
 */
export declare class Calendar extends React.Component<CalendarProps, CalendarState> {
    protected cn: (this: void | {
        props?: Record<string, unknown>;
    }, elementNameOrMods?: string | {
        [key: string]: string | number | boolean;
    }, mods?: {
        [key: string]: string | number | boolean;
    }) => string;
    static defaultProps: Partial<CalendarProps>;
    state: CalendarState;
    private root;
    private selectedYearRef;
    private yearsListRef;
    private blurTimeoutId;
    private years;
    private earlierLimit;
    private laterLimit;
    private value;
    private selectedTo;
    private selectedFrom;
    UNSAFE_componentWillMount(): void;
    UNSAFE_componentWillReceiveProps(nextProps: any): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
    renderTitle(): JSX.Element;
    private handleMonthClick;
    private handleYearClick;
    renderContent(): JSX.Element;
    renderMonths(): JSX.Element;
    private handleSelectMonthClick;
    renderYears(): JSX.Element;
    private handleSelectYearClick;
    renderDays(): JSX.Element;
    renderShortWeekdays(): JSX.Element[];
    renderMonth(): any[];
    renderWeek(week: any): any;
    private handleDayClick;
    private handleFocus;
    private handleBlur;
    private handleArrowClick;
    private handleKeyDown;
    private handleKeyUp;
    /**
     * Устанавливает фокус на календарь.
     */
    focus(): void;
    /**
     * Убирает фокус с календаря.
     */
    blur(): void;
    /**
     * Возвращает корневой `HTMLElement` компонента.
     */
    getNode(): HTMLDivElement;
    /**
     * Пролистывает список с годами до выбранного года.
     */
    private scrollToSelectedYear;
    /**
     * Возвращает `true`, если переданная дата является валидной и
     * попадает в заданные лимиты календаря.
     *
     * @param value Дата для проверки
     */
    private isValidDate;
    /**
     * Возвращает `true`, если переданная дата является выходным днем.
     *
     * @param date Дата для проверки
     */
    private isOffDay;
    /**
     * Возвращает `true`, если переданная дата является днем с событиями.
     *
     * @param date Дата для проверки
     */
    private isEventDay;
    /**
     * Генерирует событие, что значие даты изменилось.
     *
     * @param timestamp Дата
     * @param isTriggeredByKeyboard Флаг, что событие
     * произошло из-за нажатия пользователем кнопки на клавиатуре
     */
    private performChange;
    /**
     * Генерирует событие, что значение даты изменилось на переданной число дней.
     *
     * @param dayShift Смещение текущей даты в днях.
     * @param isTriggeredByKeyboard Флаг, что событие
     * произошло из-за нажатия пользователем кнопки на клавиатуре
     */
    private performChangeWithShift;
    private ensureValueInLimits;
    private calculateWeeks;
    private prepareData;
    /**
     * Проверяет наличие даты в списке дат с игнорированием таймзоны.
     *
     * @param date Дата
     * @param daysToСheck Список дат для проверки
     */
    private static checkDaysIgnoringTimezone;
}
declare const _default: React.ForwardRefExoticComponent<CalendarProps & React.RefAttributes<Calendar>> & Calendar;
export default _default;
