import type { Dayjs } from 'dayjs';
import type { InputProps } from '../input';
import type { PopupProps } from '../popup';
import type { TimePickerProps } from '../time-picker';
import type { RangeInputProps } from '../range-input';
import type { LNode } from '../../common';
export interface TypeDatePickerProps {
    allowInput?: boolean;
    clearable?: boolean;
    disableDate?: DisableDate;
    disabled?: boolean;
    enableTimePicker?: boolean;
    firstDayOfWeek?: number;
    format?: string;
    inputProps?: InputProps;
    mode?: 'year' | 'quarter' | 'month' | 'week' | 'date';
    placeholder?: string;
    popupProps?: PopupProps;
    prefixIcon?: LNode;
    presets?: PresetDate;
    presetsPlacement?: 'left' | 'top' | 'right' | 'bottom';
    status?: 'default' | 'success' | 'warning' | 'error';
    suffixIcon?: LNode;
    timePickerProps?: TimePickerProps;
    tips?: string | LNode;
    value?: DateValue;
    defaultValue?: DateValue;
    valueType?: 'time-stamp' | 'Date' | 'YYYY' | 'YYYY-MM' | 'YYYY-MM-DD' | 'YYYY-MM-DD HH' | 'YYYY-MM-DD HH:mm' | 'YYYY-MM-DD HH:mm:ss' | 'YYYY-MM-DD HH:mm:ss:SSS';
    onBlur?: (context: {
        value: DateValue;
        e: FocusEvent;
    }) => void;
    onChange?: (value: DateValue, context: {
        dayjsValue?: Dayjs;
        trigger?: DatePickerTriggerSource;
    }) => void;
    onFocus?: (context: {
        value: DateValue;
        e: FocusEvent;
    }) => void;
    onPick?: (value: DateValue) => void;
}
export interface TypeDateRangePickerProps {
    allowInput?: boolean;
    clearable?: boolean;
    disableDate?: DisableRangeDate;
    disabled?: boolean;
    enableTimePicker?: boolean;
    firstDayOfWeek?: number;
    format?: string;
    mode?: 'year' | 'quarter' | 'month' | 'week' | 'date';
    panelPreselection?: boolean;
    placeholder?: string | Array<string>;
    popupProps?: PopupProps;
    prefixIcon?: LNode;
    presets?: PresetRange;
    presetsPlacement?: 'left' | 'top' | 'right' | 'bottom';
    rangeInputProps?: RangeInputProps;
    separator?: string;
    status?: 'default' | 'success' | 'warning' | 'error';
    suffixIcon?: LNode;
    timePickerProps?: TimePickerProps;
    tips?: string | LNode;
    value?: DateRangeValue;
    defaultValue?: DateRangeValue;
    valueType?: 'time-stamp' | 'Date' | 'YYYY' | 'YYYY-MM' | 'YYYY-MM-DD' | 'YYYY-MM-DD HH' | 'YYYY-MM-DD HH:mm' | 'YYYY-MM-DD HH:mm:ss' | 'YYYY-MM-DD HH:mm:ss:SSS';
    onBlur?: (context: {
        value: DateRangeValue;
        partial: DateRangePickerPartial;
        e: FocusEvent;
    }) => void;
    onChange?: (value: DateRangeValue, context: {
        dayjsValue?: Dayjs[];
        trigger?: DatePickerTriggerSource;
    }) => void;
    onFocus?: (context: {
        value: DateRangeValue;
        partial: DateRangePickerPartial;
        e: FocusEvent;
    }) => void;
    onInput?: (context: {
        input: string;
        value: DateRangeValue;
        partial: DateRangePickerPartial;
        e: InputEvent;
    }) => void;
    onPick?: (value: DateValue, context: PickContext) => void;
}
export interface TypeDatePickerPanelProps extends Pick<TypeDatePickerProps, 'value' | 'defaultValue' | 'disabled' | 'disableDate' | 'enableTimePicker' | 'firstDayOfWeek' | 'format' | 'mode' | 'presets' | 'presetsPlacement' | 'timePickerProps'> {
    onCellClick?: (context: {
        date: Date;
        e: MouseEvent;
    }) => void;
    onChange?: (value: DateValue, context: {
        dayjsValue?: Dayjs;
        e?: MouseEvent;
        trigger?: DatePickerTriggerSource;
    }) => void;
    onConfirm?: (context: {
        date: Date;
        e: MouseEvent;
    }) => void;
    onMonthChange?: (context: {
        month: number;
        date: Date;
        e?: MouseEvent;
        trigger: DatePickerMonthChangeTrigger;
    }) => void;
    onPanelClick?: (context: {
        e: MouseEvent;
    }) => void;
    onPresetClick?: (context: {
        preset: PresetDate;
        e: MouseEvent;
    }) => void;
    onTimeChange?: (context: {
        time: string;
        date: Date;
        trigger: DatePickerTimeChangeTrigger;
        e?: MouseEvent;
    }) => void;
    onYearChange?: (context: {
        year: number;
        date: Date;
        trigger: DatePickerYearChangeTrigger;
        e?: MouseEvent;
    }) => void;
}
export interface TypeDateRangePickerPanelProps extends Pick<TypeDateRangePickerProps, 'value' | 'defaultValue' | 'disabled' | 'disableDate' | 'enableTimePicker' | 'firstDayOfWeek' | 'format' | 'mode' | 'presets' | 'presetsPlacement' | 'panelPreselection' | 'timePickerProps'> {
    onCellClick?: (context: {
        date: Date[];
        partial: DateRangePickerPartial;
        e: MouseEvent;
    }) => void;
    onChange?: (value: DateRangeValue, context: {
        dayjsValue?: Dayjs[];
        partial: DateRangePickerPartial;
        e?: MouseEvent;
        trigger?: DatePickerTriggerSource;
    }) => void;
    onConfirm?: (context: {
        date: Date[];
        e: MouseEvent;
    }) => void;
    onMonthChange?: (context: {
        month: number;
        date: Date[];
        partial: DateRangePickerPartial;
        e?: MouseEvent;
        trigger: DatePickerMonthChangeTrigger;
    }) => void;
    onPanelClick?: (context: {
        e: MouseEvent;
    }) => void;
    onPresetClick?: (context: {
        preset: PresetDate;
        e: MouseEvent;
    }) => void;
    onTimeChange?: (context: {
        time: string;
        date: Date[];
        partial: DateRangePickerPartial;
        trigger: DatePickerTimeChangeTrigger;
        e?: MouseEvent;
    }) => void;
    onYearChange?: (context: {
        year: number;
        date: Date[];
        partial: DateRangePickerPartial;
        trigger: DatePickerYearChangeTrigger;
        e?: MouseEvent;
    }) => void;
}
export type DisableDate = Array<DateValue> | DisableDateObj | ((date: DateValue) => boolean);
export interface DisableDateObj {
    from?: string;
    to?: string;
    before?: string;
    after?: string;
}
export interface PresetDate {
    [name: string]: DateValue | (() => DateValue);
}
export type DateValue = string | number | Date;
export type DatePickerTriggerSource = 'confirm' | 'pick' | 'enter' | 'preset' | 'clear';
export type DisableRangeDate = Array<DateValue> | DisableDateObj | ((context: {
    date: DateRangeValue;
    partial: DateRangePickerPartial;
}) => boolean);
export type DateRangePickerPartial = 'start' | 'end';
export interface PresetRange {
    [range: string]: DateRange | (() => DateRange);
}
export type DateRange = [DateValue, DateValue];
export type DateRangeValue = Array<DateValue>;
export interface PickContext {
    e: MouseEvent;
    partial: DateRangePickerPartial;
}
export type DatePickerMonthChangeTrigger = 'month-select' | 'month-arrow-next' | 'month-arrow-previous' | 'today';
export type DatePickerTimeChangeTrigger = 'time-hour' | 'time-minute' | 'time-second';
export type DatePickerYearChangeTrigger = 'year-select' | 'year-arrow-next' | 'year-arrow-previous' | 'today';
