import React from 'react';
import type { TGetRootNode } from '../../lib/rootNode';
import type { CommonProps } from '../../internal/CommonWrapper';
import type { Nullable, Range } from '../../typings/utility-types';
import { MonthViewModel } from './MonthViewModel';
import type { CalendarDayProps } from './CalendarDay';
export interface CalendarProps extends CommonProps {
    /** Задает функцию, которая вызывается при изменении value.
     * @param {string} date - строка в формате `dd.mm.yyyy`. */
    onValueChange?: (date: string) => void;
    /** Задает текущую дату в формате `dd.mm.yyyy`. */
    value: Nullable<string>;
    /** Задает максимальную возможную дату в формате `dd.mm.yyyy`. */
    maxDate?: string;
    /** Задает минимальную возможную дату в формате `dd.mm.yyyy`. */
    minDate?: string;
    /** Задает начальную дату периода в формате `dd.mm.yyyy`. */
    periodStartDate?: string;
    /** Задает конечную дату периода в формате `dd.mm.yyyy`. */
    periodEndDate?: string;
    /** Задает функцию для определения праздничных дней.
     * @default (_day, isWeekend) => isWeekend.
     * @param {string} day - строка в формате `dd.mm.yyyy`.
     * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье).
     * @returns {boolean} `true` для выходного или `false` для рабочего дня. */
    isHoliday?: (day: string, isWeekend: boolean) => boolean;
    /** Задает начальный месяц. */
    initialMonth?: Range<1, 13>;
    /** Задает начальный год. */
    initialYear?: number;
    /** Задает метод отрисовки дат в календаре.
     * @default (props: CalendarDayProps) => <CalendarDay {...props} />
     * @param {CalendarDayProps} props - параметры дня.
     * @returns {ReactElement} элемент, который отрисовывает контент числа месяца. */
    renderDay?: (props: CalendarDayProps) => React.ReactElement;
    /** Задает функцию, которая вызывается при каждом изменении месяца.
     * @param {CalendarMonthChangeInfo} changeInfo - информация о изменении отображаемого месяца, где
     * `month: number` - номер текущего отображаемого месяца от 1 до 12,
     * `year: number` - отображаемый год. */
    onMonthChange?: (changeInfo: CalendarMonthChangeInfo) => void;
}
export interface CalendarState {
    scrollPosition: number;
    months: MonthViewModel[];
    scrollDirection: number;
    scrollTarget: number;
}
export interface CalendarMonthChangeInfo {
    month: number;
    year: number;
}
export declare const CalendarDataTids: {
    readonly root: "Calendar__root";
    readonly month: "MonthView__month";
    readonly dayCell: "DayCellView__root";
    readonly headerMonth: "MonthView__headerMonth";
    readonly headerYear: "MonthView__headerYear";
};
type DefaultProps = Required<Pick<CalendarProps, 'minDate' | 'maxDate' | 'isHoliday'>>;
/**
 * Компонент календаря `Calendar` из DatePicker'а помогает выбирать дату с помощью мыши.
 */
export declare class Calendar extends React.Component<CalendarProps, CalendarState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static Day: React.MemoExoticComponent<import("../../lib/forwardRefAndName").ReactUIComponentWithRef<HTMLButtonElement, React.PropsWithChildren<CalendarDayProps>> & Record<never, never>>;
    private static formatDate;
    static defaultProps: DefaultProps;
    private getProps;
    private theme;
    private wheelEndTimeout;
    private root;
    private animation;
    private touchStartY;
    getRootNode: TGetRootNode;
    private setRootNode;
    constructor(props: CalendarProps);
    componentDidUpdate(prevProps: Readonly<CalendarProps>, prevState: Readonly<CalendarState>): void;
    componentWillUnmount(): void;
    render(): React.JSX.Element;
    /**
     * Прокручивает календарь до переданной даты
     * @public
     */
    scrollToMonth: (month: number, year: number) => Promise<void>;
    private handleMonthChange;
    private getViewModel;
    private renderMain;
    private refRoot;
    private renderMonth;
    private handleDateClick;
    private getDateInNativeFormat;
    private getMonthPositions;
    private getVisibleMonths;
    private handleMonthYearChange;
    private executeAnimations;
    private handleTouchStart;
    private handleTouchMove;
    private throttledHandleTouchMove;
    private handleWheel;
    private handleWheelEnd;
    private scrollToNearestWeek;
    private scrollTo;
    private scrollAmount;
}
export {};
