import React, { RefObject } from 'react';
import moment, { MomentInput, Moment, unitOfTime } from 'moment';
import Datetime from 'react-datetime';
import { InitialDirection } from './datetime-range-picker';
export declare function useValidateOnClick(): ({ start, end, minStart, maxEnd, viewMode, dateTimeFormat, sameDateError, }: {
    start?: moment.Moment | null | undefined;
    end?: moment.Moment | null | undefined;
    viewMode: string;
    dateTimeFormat: string;
    minStart?: moment.Moment | undefined;
    maxEnd?: moment.Moment | undefined;
    sameDateError?: boolean | undefined;
}) => {
    startErrors: {
        START_BEFORE_MIN?: string | undefined;
        START_AFTER_MAX?: string | undefined;
        INVALID_START_DATE?: string | undefined;
        START_END_SAME?: string | undefined;
    };
    endErrors: {
        INVALID_END_DATE?: string | undefined;
        END_AFTER_MIN?: string | undefined;
        END_AFTER_MAX?: string | undefined;
    };
};
/** Checks whether a string can be strictly parsed as a moment object following a provided datetime format
 *
 * @param {string} proposedDateTime
 * @param {string} dateTimeFormat
 * @returns {boolean}
 */
export declare function isValidDateTime(proposedDateTime: string, dateTimeFormat: string): boolean;
export declare function useGetDateTimeValidityError(): (dateTime: string, dateTimeFormat: string) => string | undefined;
export interface StringToMomentParams {
    dateTimeFormat?: string;
    strictParse?: boolean;
    allowNil?: boolean;
}
export declare function getValidityFromErrors(errorMapping: Record<string, string>): {
    type: "error";
    value: string | string[];
    displayLocation: "summary";
};
export declare function customizeCalendarView(selectedDate: Moment, start: Moment | null, end: Moment | null, className: string, viewMode: unitOfTime.Base): string;
export declare function customizeRenderCalendarView(mode: string, pickerRef: RefObject<Datetime>, value: MomentInput, dateTimeFormat: string, timeFormat: string | boolean, renderDefault: () => React.ReactElement): React.ReactElement;
export declare function isNavigationAvailableForMonthsView(currentView: string, leftPickerRef: RefObject<Datetime>, rightPickerRef: RefObject<Datetime>, quantity: number): boolean;
export declare function isNavigationAvailableForYearsView(currentView: string, leftPickerRef: RefObject<Datetime>, rightPickerRef: RefObject<Datetime>, quantity: number): boolean;
export declare function isMonthRelatedToTimePicker(pickerRef: RefObject<Datetime & {
    state?: {
        currentView?: string;
    };
}>, selectedValue: Moment): boolean;
export declare function getLeftCalendarInitialView(initialDirection: InitialDirection, start: Moment | null, end: Moment | null, viewMode: unitOfTime.Base): moment.Moment;
export declare function getRightCalendarInitialView(initialDirection: InitialDirection, start: Moment | null, end: Moment | null, viewMode: unitOfTime.Base): moment.Moment;
/** Strictly parses a string using a provided datetime format and returns a moment object
 *
 * @param {string|null} datetimeString - A string-representation of a datetime
 * @param {string} [dateTimeFormat=DEFAULT_DATETIME_FORMAT] - The datetime format used to parse the datetime string
 * @param {boolean} [strictParse=true] - If true and the string does not conform to the provided dateFormat,
 *    then an error will be thrown
 * @param {boolean} [allowNil=false] - If false and the string is actually null or undefined, then an error is thrown
 * @returns {moment.Moment|null} - Will return a moment object if the datetime string was successfully parsed as a valid
 *    datetime. May return null if a null datetime-string was passed in and allowNil ===  true.
 */
export declare function convertStringToMoment(datetimeString: string, params: StringToMomentParams): Moment;
/** Takes a moment object and returns a copy, but following the provided datetime format
 *
 * @param {moment.Moment} dateTime
 * @param {string} dateTimeFormat
 * @returns {moment.Moment}
 */
export declare function truncateDateTimeToFormat(dateTime: Moment, dateTimeFormat: string): Moment;
/** Takes a date format and a time format (both strings) and returns their concatenation with a space in-between
 *
 * @param {string} dateFormat
 * @param {string} timeFormat
 * @returns {string}
 */
export declare function getDateTimeFormat(dateFormat: string | boolean, timeFormat: string | boolean): string;
