import * as React from 'react'; import type { Moment } from 'moment'; import type { Locale as RcPickerLocale, PickerMode, RangeValue, PanelMode } from 'rc-picker/lib/interface'; import type { SharedTimeProps } from 'rc-picker/lib/panels/TimePanel'; import type { DateRender } from 'rc-picker/lib/panels/DatePanel/DateBody'; import type { MonthCellRender } from 'rc-picker/lib/panels/MonthPanel/MonthBody'; import type { PickerBaseProps as RCPickerBaseProps, PickerDateProps as RCPickerDateProps, PickerTimeProps as RCPickerTimeProps } from 'rc-picker/lib/Picker'; import type { RangeValue as RCRangeValueType } from 'rc-picker/lib/interface'; import type { RangePickerBaseProps as RCRangePickerBaseProps, RangePickerDateProps as RCRangePickerDateProps, RangePickerTimeProps as RCRangePickerTimeProps } from 'rc-picker/lib/RangePicker'; import type { Lang, PlacementType } from '../../wui-core/src/utils/type'; import type { BaseProps } from '../../wui-core/src/iCore'; export interface AdditionalPickerLocaleProps { dateFormat?: string; dateTimeFormat?: string; weekFormat?: string; monthFormat?: string; quarterFormat?: string; } export interface AdditionalPickerLocaleLangProps { placeholder?: string; yearPlaceholder?: string; quarterPlaceholder?: string; monthPlaceholder?: string; weekPlaceholder?: string; rangeYearPlaceholder?: [string, string]; rangeMonthPlaceholder?: [string, string]; rangeWeekPlaceholder?: [string, string]; rangePlaceholder?: [string, string]; } export type PickerLocale = { lang: RcPickerLocale & AdditionalPickerLocaleLangProps; } & AdditionalPickerLocaleProps & RcPickerLocale; type InjectDefaultProps = Omit & { locale?: PickerLocale | string; }; export interface PickerBaseProps extends InjectDefaultProps> { } export interface PickerDateProps extends InjectDefaultProps> { } export interface PickerTimeProps extends InjectDefaultProps> { } type OmitDatePickerProps = 'locale' | 'closeIcon' | 'clearIcon' | 'renderIcon' | 'suffixIcon' | 'defaultPanelShown' | 'dateCellRender' | 'onChange' | 'onOk' | 'onBlur' | 'onOpenChange' | 'onSelect' | 'placement' | 'dropdownAlign' | 'picker' | 'format' | 'showTime' | 'defaultValue' | 'value'; export type Placement = 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight'; export interface DatePickerProps extends Omit | PickerDateProps | PickerTimeProps, OmitDatePickerProps>, BaseProps { autoFix?: boolean; enterKeyDown?: boolean; locale?: string | Partial; closeIcon?: React.ReactNode | (() => React.ReactNode); clearIcon?: React.ReactNode | (() => React.ReactNode); renderIcon?: React.ReactNode | (() => React.ReactNode); suffixIcon?: React.ReactNode | (() => React.ReactNode); defaultPanelShown?: boolean; disabledDateValid?: boolean; disabledDate?: (date: Moment) => boolean; iconClick?: React.MouseEventHandler; dateCellRender?: DateRender; monthCellContentRender?: MonthCellRender; onChange?: (value: Moment | null, dateString: string, halfYearArr?: string[]) => void; onOk?: (value: Moment | null, dateString: string) => void; onBlur?: (event: React.FocusEvent, dateString: string) => void; onDateInputBlur?: (event: React.FocusEvent, dateString: string) => void; outInputKeydown?: (event: React.KeyboardEvent, preventDefault: () => void) => void; outInputFocus?: React.FocusEventHandler; onOpenChange?: (open: boolean, value?: Moment | string | null, dateString?: string) => void; onSelect?: (value: Moment | null, dateString: string) => void; placement?: Placement; dropdownAlign?: string; popupClassName?: PickerBaseProps['dropdownClassName']; picker?: PickerMode | 'range'; format?: string | string[]; showToday?: boolean; showTime?: boolean | SharedTimeProps; use12Hours?: boolean; showHour?: boolean; showMinute?: boolean; showSecond?: boolean; defaultValue?: Moment | string; value?: Moment | string | null; getCalendarContainer?: (node: HTMLElement) => HTMLElement; isHeaderSelect?: boolean; } export interface DatePickerState { lang: { lang: string; langMap: any; }; open: DatePickerProps['open']; value: DatePickerProps['value']; format: string; initFormat: string; dropdownAlign: PlacementType; showTime: DatePickerProps['showTime']; clearIcon: React.ReactNode; suffixIcon: React.ReactNode; _isFix: boolean; _forbidOpen: boolean; diffValue: [number, number]; selectYear: number; selectMonth: number; maskShow: boolean; activeYearNum: number; activeMonthNum: number; } export interface RangePickerBaseProps extends InjectDefaultProps> { } export interface RangePickerDateProps extends InjectDefaultProps> { } export interface RangePickerTimeProps extends InjectDefaultProps> { } export type RangeValueType = RCRangeValueType; export interface RangePresetType { label: string; key: string; value: RangeValueType | (() => RangeValueType); } export type RangesType = RangePresetType[] | { [preset: string]: RangeValueType; }; type OmitRangePickerProps = 'mode' | 'placeholder' | 'value' | 'defaultValue' | 'defaultPickerValue' | 'format' | 'disabled' | 'showTime' | 'closeIcon' | 'renderExtraFooter' | 'ranges' | 'presets' | 'activePresetLabel' | 'onPresetChange' | 'onBlur' | 'onChange' | 'onPanelChange'; type RangeValuesType = string | [string, string] | RangeValue; export interface RangePickerProps extends Omit | RangePickerDateProps | RangePickerTimeProps, OmitRangePickerProps>, BaseProps { antd?: boolean; mode?: PanelMode | [PanelMode, PanelMode]; placeholder?: string | [string, string]; dateInputPlaceholder?: string | [string, string]; value?: RangeValuesType; defaultValue?: RangeValuesType; defaultPickerValue?: RangeValue; format?: string | [string, string]; order?: boolean; popupClassName?: PickerBaseProps['dropdownClassName']; disabled?: boolean | boolean[]; disabledDateValid?: boolean; allowEmpty?: [boolean, boolean]; use12Hours?: boolean; showTime?: Omit | { defaultValue?: RangeValuesType; }; ranges?: RangesType; presets?: RangesType; showRangeLabel?: boolean; activePresetKey?: string; dateCellRender?: RangePickerDateProps['dateRender']; renderExtraFooter?: (mode: PanelMode) => React.ReactNode; renderFooter?: (mode: PanelMode) => React.ReactNode; closeIcon?: DatePickerProps['closeIcon']; renderIcon?: DatePickerProps['renderIcon']; iconClick?: DatePickerProps['iconClick']; getCalendarContainer?: (dom: HTMLElement) => void; onPresetChange?: (label: string, values: RangeValue, range: RangeValueType | RangePresetType, lastSelectDate: Moment | null) => void; onStartInputBlur?: (event: React.FocusEvent, startValue: string, value: [string, string]) => void; onEndInputBlur?: (event: React.FocusEvent, endValue: string, value: [string, string]) => void; onBlur?: (event: React.FocusEvent) => void; onChange?: (value: RangeValue, formatString: string | [string, string], format?: [string, string] | null, halfYearArr?: string[][]) => void; onSelect?: (value: Moment) => void; onPanelChange?: (values: RangeValue, modes?: [PanelMode, PanelMode]) => void; onCalendarChange?: (value: RangeValue | null, formatString: [string, string], info: { range: string; }) => void; isHeaderSelect?: boolean; } export interface RangePickerState { langInfo: { lang: Lang; langMap: RcPickerLocale; }; value: RangeValue; format: [string, string]; labelFormat: [string, string]; ranges: RCRangePickerBaseProps['ranges']; activePresetLabel: string; placeholder?: [string, string]; clearIcon: React.ReactNode; suffixIcon: React.ReactNode; open?: boolean; modeArr: [PanelMode, PanelMode] | undefined; lastSelectDate: Moment | null; diffValue: [number, number]; maskShow: boolean; leftValue: string; rightValue: string; inputActiveIndex: number; } export interface DateRangePickerProps extends Omit { picker?: 'range'; } export {};