import { ReactNode, RefAttributes, ReactElement } from 'react';
import { FieldValues, FieldPath, FieldError, UseControllerProps, Control, PathValue } from 'react-hook-form';
import { PickersTextFieldProps } from '@mui/x-date-pickers/PickersTextField';
import { DateValidationError, DatePickerProps, DatePickerSlotProps, PickerChangeHandlerContext, MobileDatePickerProps, MobileDatePickerSlotProps, DateTimeValidationError, PickerValidDate as PickerValidDate$1, DateTimePickerProps, DateTimePickerSlotProps, TimeValidationError, TimePickerProps, TimePickerSlotProps } from '@mui/x-date-pickers';
import { PickerValidDate } from '@mui/x-date-pickers/models';

declare const defaultErrorMessages$2: {
    [v in NonNullable<DateValidationError>]: string;
};

type DatePickerElementProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate = PickerValidDate> = Omit<DatePickerProps, 'value' | 'slotProps'> & {
    name: TName;
    required?: boolean;
    isDate?: boolean;
    parseError?: (error: FieldError | DateValidationError) => ReactNode;
    rules?: UseControllerProps<TFieldValues, TName>['rules'];
    control?: Control<TFieldValues>;
    inputProps?: Partial<PickersTextFieldProps>;
    helperText?: PickersTextFieldProps['helperText'];
    textReadOnly?: boolean;
    slotProps?: Omit<DatePickerSlotProps, 'textField'>;
    overwriteErrorMessages?: typeof defaultErrorMessages$2;
    transform?: {
        input?: (value: PathValue<TFieldValues, TName>) => TValue | null;
        output?: (value: TValue | null, context: PickerChangeHandlerContext<DateValidationError>) => PathValue<TFieldValues, TName>;
    };
};
type DatePickerElementComponent = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate = PickerValidDate>(props: DatePickerElementProps<TFieldValues, TName, TValue> & RefAttributes<HTMLDivElement>) => ReactElement;
declare const _default$3: DatePickerElementComponent;

type MobileDatePickerElementProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate = PickerValidDate> = Omit<MobileDatePickerProps, 'value' | 'slotProps'> & {
    name: TName;
    required?: boolean;
    isDate?: boolean;
    parseError?: (error: FieldError) => ReactNode;
    rules?: UseControllerProps<TFieldValues, TName>['rules'];
    control?: Control<TFieldValues>;
    inputProps?: Partial<PickersTextFieldProps>;
    helperText?: PickersTextFieldProps['helperText'];
    slotProps?: Omit<MobileDatePickerSlotProps, 'textField'>;
    overwriteErrorMessages?: typeof defaultErrorMessages$2;
    transform?: {
        input?: (value: PathValue<TFieldValues, TName>) => TValue | null;
        output?: (value: TValue | null, context: PickerChangeHandlerContext<DateValidationError>) => PathValue<TFieldValues, TName>;
    };
};
type MobileDatePickerElementComponent = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate = PickerValidDate>(props: MobileDatePickerElementProps<TFieldValues, TName, TValue> & RefAttributes<HTMLDivElement>) => ReactElement;
declare const _default$2: MobileDatePickerElementComponent;

declare const defaultErrorMessages$1: {
    [v in NonNullable<DateTimeValidationError>]: string;
};

type DateTimePickerElementProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate$1 = PickerValidDate$1> = Omit<DateTimePickerProps, 'value' | 'slotProps'> & {
    name: TName;
    required?: boolean;
    isDate?: boolean;
    parseError?: (error: FieldError) => ReactNode;
    rules?: UseControllerProps<TFieldValues, TName>['rules'];
    control?: Control<TFieldValues>;
    inputProps?: Partial<PickersTextFieldProps>;
    helperText?: PickersTextFieldProps['helperText'];
    textReadOnly?: boolean;
    slotProps?: Omit<DateTimePickerSlotProps, 'textField'>;
    overwriteErrorMessages?: typeof defaultErrorMessages$1;
    transform?: {
        input?: (value: PathValue<TFieldValues, TName>) => TValue | null;
        output?: (value: TValue | null, context: PickerChangeHandlerContext<DateTimeValidationError>) => PathValue<TFieldValues, TName>;
    };
};
type DateTimePickerElementComponent = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate$1 = PickerValidDate$1>(props: DateTimePickerElementProps<TFieldValues, TName, TValue> & RefAttributes<HTMLDivElement>) => ReactElement;
declare const _default$1: DateTimePickerElementComponent;

declare const defaultErrorMessages: {
    [v in NonNullable<TimeValidationError>]: string;
};

type TimePickerElementProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate = PickerValidDate> = Omit<TimePickerProps, 'value' | 'renderInput'> & {
    name: TName;
    required?: boolean;
    isDate?: boolean;
    parseError?: (error: FieldError) => ReactNode;
    rules?: UseControllerProps<TFieldValues, TName>['rules'];
    control?: Control<TFieldValues>;
    inputProps?: Partial<PickersTextFieldProps>;
    helperText?: PickersTextFieldProps['helperText'];
    textReadOnly?: boolean;
    slotProps?: Omit<TimePickerSlotProps, 'textField'>;
    overwriteErrorMessages?: typeof defaultErrorMessages;
    transform?: {
        input?: (value: PathValue<TFieldValues, TName>) => TValue | null;
        output?: (value: TValue | null, context: PickerChangeHandlerContext<TimeValidationError>) => PathValue<TFieldValues, TName>;
    };
};
type TimePickerElementComponent = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>, TValue extends PickerValidDate = PickerValidDate>(props: TimePickerElementProps<TFieldValues, TName, TValue> & RefAttributes<HTMLDivElement>) => ReactElement;
declare const _default: TimePickerElementComponent;

export { _default$3 as DatePickerElement, type DatePickerElementProps, _default$1 as DateTimePickerElement, type DateTimePickerElementProps, _default$2 as MobileDatePickerElement, type MobileDatePickerElementProps, _default as TimePickerElement, type TimePickerElementProps };
