import { CSSProperties, PropType } from 'vue';
import { PickerLocale } from '.';
import { FocusEventHandler, MouseEventHandler } from '../../_util/EventInterface';
import { InputStatus } from '../../_util/statusUtils';
import { VueNode } from '../../_util/type';
import { SizeType } from '../../config-provider';
import { RangeDateRender, RangeInfo, RangeType } from '../../vc-picker/RangePicker';
import { CustomFormat, DisabledTime, DisabledTimes, EventValue, PanelMode, PickerMode, PresetDate, RangeValue } from '../../vc-picker/interface';
import { DateRender } from '../../vc-picker/panels/DatePanel/DateBody';
import { MonthCellRender } from '../../vc-picker/panels/MonthPanel/MonthBody';
import { SharedTimeProps } from '../../vc-picker/panels/TimePanel';
declare const DataPickerPlacements: readonly ["bottomLeft", "bottomRight", "topLeft", "topRight"];
type DataPickerPlacement = (typeof DataPickerPlacements)[number];
type RangeShowTimeObject<DateType> = Omit<SharedTimeProps<DateType>, 'defaultValue'> & {
    defaultValue?: DateType[];
};
declare function commonProps<DateType = any>(): {
    id: StringConstructor;
    /**
     * @deprecated `dropdownClassName` is deprecated which will be removed in next major
     *   version.Please use `popupClassName` instead.
     */
    dropdownClassName: StringConstructor;
    popupClassName: StringConstructor;
    popupStyle: {
        type: PropType<CSSProperties>;
        default: CSSProperties;
    };
    transitionName: StringConstructor;
    placeholder: StringConstructor;
    allowClear: {
        type: BooleanConstructor;
        default: boolean;
    };
    autofocus: {
        type: BooleanConstructor;
        default: boolean;
    };
    disabled: {
        type: BooleanConstructor;
        default: boolean;
    };
    tabindex: NumberConstructor;
    open: {
        type: BooleanConstructor;
        default: boolean;
    };
    defaultOpen: {
        type: BooleanConstructor;
        default: boolean;
    };
    /** Make input readOnly to avoid popup keyboard in mobile */
    inputReadOnly: {
        type: BooleanConstructor;
        default: boolean;
    };
    format: {
        type: PropType<string | CustomFormat<DateType> | (string | CustomFormat<DateType>)[]>;
        default: string | CustomFormat<DateType> | (string | CustomFormat<DateType>)[];
    };
    getPopupContainer: {
        type: PropType<(node: HTMLElement) => HTMLElement>;
        default: (node: HTMLElement) => HTMLElement;
    };
    panelRender: {
        type: PropType<(originPanel: VueNode) => VueNode>;
        default: (originPanel: VueNode) => VueNode;
    };
    onChange: {
        type: PropType<(value: DateType | string | null, dateString: string) => void>;
        default: (value: DateType | string | null, dateString: string) => void;
    };
    'onUpdate:value': {
        type: PropType<(value: DateType | string | null) => void>;
        default: (value: DateType | string | null) => void;
    };
    onOk: {
        type: PropType<(value: DateType | string | null) => void>;
        default: (value: DateType | string | null) => void;
    };
    onOpenChange: {
        type: PropType<(open: boolean) => void>;
        default: (open: boolean) => void;
    };
    'onUpdate:open': {
        type: PropType<(open: boolean) => void>;
        default: (open: boolean) => void;
    };
    onFocus: {
        type: PropType<FocusEventHandler>;
        default: FocusEventHandler;
    };
    onBlur: {
        type: PropType<FocusEventHandler>;
        default: FocusEventHandler;
    };
    onMousedown: {
        type: PropType<MouseEventHandler>;
        default: MouseEventHandler;
    };
    onMouseup: {
        type: PropType<MouseEventHandler>;
        default: MouseEventHandler;
    };
    onMouseenter: {
        type: PropType<MouseEventHandler>;
        default: MouseEventHandler;
    };
    onMouseleave: {
        type: PropType<MouseEventHandler>;
        default: MouseEventHandler;
    };
    onClick: {
        type: PropType<MouseEventHandler>;
        default: MouseEventHandler;
    };
    onContextmenu: {
        type: PropType<MouseEventHandler>;
        default: MouseEventHandler;
    };
    onKeydown: {
        type: PropType<(event: KeyboardEvent, preventDefault: () => void) => void>;
        default: (event: KeyboardEvent, preventDefault: () => void) => void;
    };
    role: StringConstructor;
    name: StringConstructor;
    autocomplete: StringConstructor;
    direction: {
        type: PropType<"ltr" | "rtl">;
        default: "ltr" | "rtl";
    };
    showToday: {
        type: BooleanConstructor;
        default: boolean;
    };
    showTime: {
        type: PropType<boolean | SharedTimeProps<DateType>>;
        default: boolean | SharedTimeProps<DateType>;
    };
    locale: {
        type: PropType<PickerLocale>;
        default: PickerLocale;
    };
    size: {
        type: PropType<SizeType>;
        default: SizeType;
    };
    bordered: {
        type: BooleanConstructor;
        default: boolean;
    };
    dateRender: {
        type: PropType<DateRender<DateType>>;
        default: DateRender<DateType>;
    };
    disabledDate: {
        type: PropType<(date: DateType) => boolean>;
        default: (date: DateType) => boolean;
    };
    mode: {
        type: PropType<PanelMode>;
        default: PanelMode;
    };
    picker: {
        type: PropType<PickerMode>;
        default: PickerMode;
    };
    valueFormat: StringConstructor;
    placement: {
        type: PropType<"bottomLeft" | "bottomRight" | "topLeft" | "topRight">;
        default: "bottomLeft" | "bottomRight" | "topLeft" | "topRight";
    };
    status: {
        type: PropType<"" | "error" | "warning">;
        default: "" | "error" | "warning";
    };
    /** @deprecated Please use `disabledTime` instead. */
    disabledHours: {
        type: PropType<(() => number[]) | undefined>;
        default: (() => number[]) | undefined;
    };
    /** @deprecated Please use `disabledTime` instead. */
    disabledMinutes: {
        type: PropType<((hour: number) => number[]) | undefined>;
        default: ((hour: number) => number[]) | undefined;
    };
    /** @deprecated Please use `disabledTime` instead. */
    disabledSeconds: {
        type: PropType<((hour: number, minute: number) => number[]) | undefined>;
        default: ((hour: number, minute: number) => number[]) | undefined;
    };
};
export interface CommonProps<DateType> {
    id?: string;
    prefixCls?: string;
    /**
     * @deprecated `dropdownClassName` is deprecated which will be removed in next major
     *   version.Please use `popupClassName` instead.
     */
    dropdownClassName?: string;
    popupClassName?: string;
    popupStyle?: CSSProperties;
    transitionName?: string;
    placeholder?: string;
    allowClear?: boolean;
    autofocus?: boolean;
    disabled?: boolean;
    tabindex?: number;
    open?: boolean;
    defaultOpen?: boolean;
    inputReadOnly?: boolean;
    format?: string | CustomFormat<DateType> | (string | CustomFormat<DateType>)[];
    suffixIcon?: VueNode;
    clearIcon?: VueNode;
    prevIcon?: VueNode;
    nextIcon?: VueNode;
    superPrevIcon?: VueNode;
    superNextIcon?: VueNode;
    getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
    panelRender?: (originPanel: VueNode) => VueNode;
    onChange?: (value: DateType | string | null, dateString: string) => void;
    'onUpdate:value'?: (value: DateType | string | null) => void;
    onOk?: (value: DateType | string | null) => void;
    onOpenChange?: (open: boolean) => void;
    'onUpdate:open'?: (open: boolean) => void;
    onFocus?: FocusEventHandler;
    onBlur?: FocusEventHandler;
    onMousedown?: MouseEventHandler;
    onMouseup?: MouseEventHandler;
    onMouseenter?: MouseEventHandler;
    onMouseleave?: MouseEventHandler;
    onClick?: MouseEventHandler;
    onContextmenu?: MouseEventHandler;
    onKeydown?: (event: KeyboardEvent, preventDefault: () => void) => void;
    role?: string;
    name?: string;
    autocomplete?: string;
    direction?: 'ltr' | 'rtl';
    showToday?: boolean;
    showTime?: boolean | SharedTimeProps<DateType>;
    locale?: PickerLocale;
    size?: SizeType;
    bordered?: boolean;
    dateRender?: DateRender<DateType>;
    disabledDate?: (date: DateType) => boolean;
    mode?: PanelMode;
    picker?: PickerMode;
    valueFormat?: string;
    placement?: DataPickerPlacement;
    status?: InputStatus;
}
declare function datePickerProps<DateType = any>(): {
    defaultPickerValue: {
        type: PropType<string | DateType>;
        default: string | DateType;
    };
    defaultValue: {
        type: PropType<string | DateType>;
        default: string | DateType;
    };
    value: {
        type: PropType<string | DateType>;
        default: string | DateType;
    };
    presets: {
        type: PropType<PresetDate<DateType>[]>;
        default: PresetDate<DateType>[];
    };
    disabledTime: {
        type: PropType<DisabledTime<DateType>>;
        default: DisabledTime<DateType>;
    };
    renderExtraFooter: {
        type: PropType<(mode: PanelMode) => VueNode>;
        default: (mode: PanelMode) => VueNode;
    };
    showNow: {
        type: BooleanConstructor;
        default: boolean;
    };
    monthCellRender: {
        type: PropType<MonthCellRender<DateType>>;
        default: MonthCellRender<DateType>;
    };
    monthCellContentRender: {
        type: PropType<MonthCellRender<DateType>>;
        default: MonthCellRender<DateType>;
    };
};
export interface DatePickerProps<DateType> {
    defaultPickerValue?: DateType | string;
    defaultValue?: DateType | string;
    value?: DateType | string;
    presets?: PresetDate<DateType>[];
    disabledTime?: DisabledTime<DateType>;
    renderExtraFooter?: (mode: PanelMode) => VueNode;
    showNow?: boolean;
    monthCellRender?: MonthCellRender<DateType>;
    monthCellContentRender?: MonthCellRender<DateType>;
}
declare function rangePickerProps<DateType>(): {
    allowEmpty: {
        type: PropType<[boolean, boolean]>;
        default: [boolean, boolean];
    };
    dateRender: {
        type: PropType<RangeDateRender<DateType>>;
        default: RangeDateRender<DateType>;
    };
    defaultPickerValue: {
        type: PropType<[EventValue<DateType>, EventValue<DateType>] | [EventValue<string>, EventValue<string>] | null>;
        default: [EventValue<DateType>, EventValue<DateType>] | [EventValue<string>, EventValue<string>] | null;
    };
    defaultValue: {
        type: PropType<[EventValue<DateType>, EventValue<DateType>] | [EventValue<string>, EventValue<string>] | null>;
        default: [EventValue<DateType>, EventValue<DateType>] | [EventValue<string>, EventValue<string>] | null;
    };
    value: {
        type: PropType<[EventValue<DateType>, EventValue<DateType>] | [EventValue<string>, EventValue<string>] | null>;
        default: [EventValue<DateType>, EventValue<DateType>] | [EventValue<string>, EventValue<string>] | null;
    };
    presets: {
        type: PropType<PresetDate<DateType[]>[]>;
        default: PresetDate<DateType[]>[];
    };
    disabledTime: {
        type: PropType<(date: EventValue<DateType>, type: RangeType) => DisabledTimes>;
        default: (date: EventValue<DateType>, type: RangeType) => DisabledTimes;
    };
    disabled: {
        type: PropType<boolean | [boolean, boolean]>;
        default: boolean | [boolean, boolean];
    };
    renderExtraFooter: {
        type: PropType<() => VueNode>;
        default: () => VueNode;
    };
    separator: {
        type: StringConstructor;
    };
    showTime: {
        type: PropType<boolean | RangeShowTimeObject<DateType>>;
        default: boolean | RangeShowTimeObject<DateType>;
    };
    ranges: {
        type: PropType<Record<string, [EventValue<DateType>, EventValue<DateType>] | (() => Exclude<RangeValue<DateType>, null>)>>;
        default: Record<string, [EventValue<DateType>, EventValue<DateType>] | (() => Exclude<RangeValue<DateType>, null>)>;
    };
    placeholder: {
        type: PropType<string[]>;
        default: string[];
    };
    mode: {
        type: PropType<[PanelMode, PanelMode]>;
        default: [PanelMode, PanelMode];
    };
    onChange: {
        type: PropType<(value: RangeValue<DateType> | RangeValue<string> | null, dateString: [string, string]) => void>;
        default: (value: RangeValue<DateType> | RangeValue<string> | null, dateString: [string, string]) => void;
    };
    'onUpdate:value': {
        type: PropType<(value: RangeValue<DateType> | RangeValue<string> | null) => void>;
        default: (value: RangeValue<DateType> | RangeValue<string> | null) => void;
    };
    onCalendarChange: {
        type: PropType<(values: RangeValue<DateType> | RangeValue<string>, formatString: [string, string], info: RangeInfo) => void>;
        default: (values: RangeValue<DateType> | RangeValue<string>, formatString: [string, string], info: RangeInfo) => void;
    };
    onPanelChange: {
        type: PropType<(values: RangeValue<DateType> | RangeValue<string>, modes: [PanelMode, PanelMode]) => void>;
        default: (values: RangeValue<DateType> | RangeValue<string>, modes: [PanelMode, PanelMode]) => void;
    };
    onOk: {
        type: PropType<(dates: RangeValue<DateType> | RangeValue<string>) => void>;
        default: (dates: RangeValue<DateType> | RangeValue<string>) => void;
    };
};
export interface RangePickerProps<DateType> {
    allowEmpty?: [boolean, boolean];
    dateRender?: RangeDateRender<DateType>;
    defaultPickerValue?: RangeValue<DateType> | RangeValue<string>;
    defaultValue?: RangeValue<DateType> | RangeValue<string>;
    value?: RangeValue<DateType> | RangeValue<string>;
    presets?: PresetDate<RangeValue<DateType>>[];
    disabledTime?: (date: EventValue<DateType>, type: RangeType) => DisabledTimes;
    disabled?: [boolean, boolean];
    renderExtraFooter?: () => VueNode;
    separator?: string;
    showTime?: boolean | RangeShowTimeObject<DateType>;
    ranges?: Record<string, Exclude<RangeValue<DateType>, null> | (() => Exclude<RangeValue<DateType>, null>)>;
    placeholder?: [string, string];
    mode?: [PanelMode, PanelMode];
    onChange?: (value: RangeValue<DateType> | RangeValue<string> | null, dateString: [string, string]) => void;
    'onUpdate:value'?: (value: RangeValue<DateType> | RangeValue<string> | null) => void;
    onCalendarChange?: (values: RangeValue<DateType> | RangeValue<string>, formatString: [string, string], info: RangeInfo) => void;
    onPanelChange?: (values: RangeValue<DateType> | RangeValue<string>, modes: [PanelMode, PanelMode]) => void;
    onOk?: (dates: RangeValue<DateType> | RangeValue<string>) => void;
}
export interface ExtraDatePickerProps<DateType> {
    valueFormat?: string;
    defaultPickerValue?: DateType | string;
    defaultValue?: DateType | string;
    value?: DateType | string;
}
export interface ExtraRangePickerProps<DateType> {
    valueFormat?: string;
    defaultPickerValue?: RangeValue<DateType> | RangeValue<string>;
    defaultValue?: RangeValue<DateType> | RangeValue<string>;
    value?: RangeValue<DateType> | RangeValue<string>;
}
export { commonProps, datePickerProps, rangePickerProps };
