import { IconComponent, IconPropSize } from '@consta/icons/Icon';
import { Locale } from 'date-fns';
import { DateRange } from '../../utils/types/Date';
import { PropsWithHTMLAttributesAndRef } from '../../utils/types/PropsWithHTMLAttributes';
import { DateTimePropDisableDates, DateTimePropView } from '../DateTime/helpers';
import { TextFieldPropForm, TextFieldPropSize, TextFieldPropStatus, TextFieldPropView } from '../TextField/TextField';
export declare const datePickerPropType: readonly ["date", "date-range", "date-time", "date-time-range", "time", "year", "year-range", "month", "month-range"];
export type DatePickerPropType = typeof datePickerPropType[number];
export declare const datePickerPropTypeDefault: "date";
export type DatePickerPropDateTimeView = DateTimePropView;
export declare const datePickerPropDateTimeViewDefault: "classic";
type Range = 'date-range' | 'date-time-range' | 'year-range' | 'month-range';
export declare const datePickerErrorTypes: readonly ["outOfRange", "invalidInputAttempt", "startDateIsGreaterThanEndDate"];
export type DatePickerPropValue<TYPE extends DatePickerPropType> = (TYPE extends Range ? DateRange : Date) | null;
export type DatePickerPropPlaceholder<TYPE> = TYPE extends Range ? [string?, string?] | string : string;
export type DatePickerPropOnChange<TYPE extends DatePickerPropType> = (value: DatePickerPropValue<TYPE>, props: {
    e: React.MouseEvent<HTMLButtonElement, MouseEvent> | Event;
}) => void;
export declare const datePickerPropDropdownForm: readonly ["default", "brick", "round"];
export type DatePickerPropDropdownForm = typeof datePickerPropDropdownForm[number];
export declare const datePickerPropDropdownFormDefault: "default";
type DatePickerPropInputRef<TYPE> = TYPE extends Range ? [React.Ref<HTMLInputElement>?, React.Ref<HTMLInputElement>?] : React.Ref<HTMLInputElement>;
type DatePickerPropSide<TYPE> = TYPE extends Range ? [(string | IconComponent)?, (string | IconComponent)?] | string | IconComponent : string | IconComponent;
type DatePickerPropOnFocus<TYPE> = TYPE extends Range ? [
    React.FocusEventHandler<HTMLElement>?,
    React.FocusEventHandler<HTMLElement>?
] | React.FocusEventHandler<HTMLElement> : React.FocusEventHandler<HTMLElement>;
type DatePickerPropName<TYPE> = TYPE extends Range ? [string?, string?] | string : string;
export type DatePickerAdditionalControlRenderFn = (props: {
    currentVisibleDate?: Date;
}) => React.ReactNode | React.ReactNode[];
export type DatePickerAdditionalControlRenderProp = React.ReactNode | DatePickerAdditionalControlRenderFn;
export type DatePickerProps<TYPE extends DatePickerPropType = 'date'> = PropsWithHTMLAttributesAndRef<{
    type?: TYPE;
    value?: DatePickerPropValue<TYPE>;
    onChange?: DatePickerPropOnChange<TYPE>;
    minDate?: Date;
    maxDate?: Date;
    renderAdditionalControls?: DatePickerAdditionalControlRenderProp;
    events?: Date[];
    dateTimeView?: DatePickerPropDateTimeView;
    locale?: Locale;
    children?: never;
    onError?: DatePickerPropOnError;
    id?: string;
    name?: DatePickerPropName<TYPE>;
    disabled?: boolean;
    disableDates?: DateTimePropDisableDates;
    dropdownClassName?: string;
    dropdownRef?: React.Ref<HTMLDivElement>;
    size?: TextFieldPropSize;
    view?: TextFieldPropView;
    form?: TextFieldPropForm;
    status?: TextFieldPropStatus;
    onFocus?: DatePickerPropOnFocus<TYPE>;
    onBlur?: DatePickerPropOnFocus<TYPE>;
    autoFocus?: boolean;
    placeholder?: DatePickerPropPlaceholder<TYPE>;
    readOnly?: boolean;
    required?: boolean;
    tabIndex?: number;
    inputRef?: DatePickerPropInputRef<TYPE>;
    ariaLabel?: string;
    iconSize?: IconPropSize;
    format?: string;
    separator?: string;
    dropdownForm?: DatePickerPropDropdownForm;
    leftSide?: DatePickerPropSide<TYPE>;
    rightSide?: DatePickerPropSide<TYPE>;
    label?: string;
    labelIcon?: IconComponent;
    caption?: string;
    labelPosition?: 'top' | 'left';
    onChangeCurrentVisibleDate?: (date: Date) => void;
    currentVisibleDate?: Date;
    multiplicitySeconds?: number;
    multiplicityMinutes?: number;
    multiplicityHours?: number;
    isMobile?: number;
    withClearButton?: boolean;
    onDropdownOpen?: (isOpen: boolean) => void;
    dropdownOpen?: boolean;
    ignoreOutsideClicksRefs?: ReadonlyArray<React.RefObject<HTMLElement>>;
}, HTMLDivElement>;
export type DatePickerComponent = <TYPE extends DatePickerPropType = 'date'>(props: DatePickerProps<TYPE>) => React.ReactElement | null;
export type DatePickerTypeComponent<TYPE extends DatePickerPropType> = (props: Omit<DatePickerProps<TYPE>, 'type'>) => React.ReactElement | null;
export type DatePickerPropOnError = (props: {
    type: typeof datePickerErrorTypes[0];
    stringValue: string;
    dd?: string;
    MM?: string;
    yyyy?: string;
    ss?: string;
    mm?: string;
    HH?: string;
    date: Date;
} | {
    type: typeof datePickerErrorTypes[1];
    stringValue: string;
    dd?: string;
    MM?: string;
    yyyy?: string;
    ss?: string;
    mm?: string;
    HH?: string;
} | {
    type: typeof datePickerErrorTypes[2];
    date: [Date, Date];
}) => void;
export {};
