import { MutableRefObject } from 'react';
import { DateValue } from '@internationalized/date';
import { AriaButtonProps } from '@react-aria/button';
import { AriaDatePickerProps } from '@react-aria/datepicker';
import { DatePickerState } from '@react-stately/datepicker';
import { CalendarProps } from '@react-types/calendar';
import { AriaDialogProps } from '@react-types/dialog';
import { GroupDOMAttributes, DOMAttributes } from '@react-types/shared';
import { TimeInputProps } from '../input/time-input.js';
import { ElementProps } from '../types/common.types.js';
import '../types/theme.types.js';
import '../input/date-field.js';
import '../input/date-input-segment.js';
import '../input/date-input-group.js';

interface UseDatePickerProps<T extends DateValue = DateValue> extends AriaDatePickerProps<T> {
    dateInputProps?: CalendarProps<T>;
    calendarProps?: CalendarProps<T>;
    timeInputProps?: TimeInputProps;
}
type GetDateInputProps<T extends DateValue = DateValue> = AriaDatePickerProps<T> & {
    groupProps: GroupDOMAttributes;
    labelProps: DOMAttributes;
};
type UseDatePickerReturn<T extends DateValue> = {
    ref: MutableRefObject<HTMLDivElement>;
    state: DatePickerState;
    getTriggerProps: ElementProps<'button'>;
    getAriaTriggerProps: AriaButtonProps<'button'>;
    getDateInputProps: GetDateInputProps<T>;
    getTimeInputProps: TimeInputProps;
    getCalendarProps: CalendarProps<T>;
    getDialogProps: AriaDialogProps;
};
declare const useDatePicker: <T extends DateValue>(props?: UseDatePickerProps<T>) => UseDatePickerReturn<T>;

export { type UseDatePickerProps, useDatePicker };
