import type { PickerRef, PickerProps as RcPickerProps, RangePickerProps as RcRangePickerProps, } from 'rc-picker'; import type { Locale as RcPickerLocale } from 'rc-picker/lib/interface'; import type { InputStatus } from '../../_util/statusUtils'; import type { AnyObject } from '../../_util/type'; import type { SizeType } from '../../config-provider/SizeContext'; import type { Variant } from '../../config-provider'; import type { TimePickerLocale } from '../../time-picker'; const DataPickerPlacements = ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'] as const; type DataPickerPlacement = (typeof DataPickerPlacements)[number]; export type PickerLocale = { lang: RcPickerLocale & AdditionalPickerLocaleLangProps; timePickerLocale: TimePickerLocale; } & AdditionalPickerLocaleProps; export type AdditionalPickerLocaleProps = { dateFormat?: string; dateTimeFormat?: string; weekFormat?: string; monthFormat?: string; }; export type AdditionalPickerLocaleLangProps = { placeholder: string; yearPlaceholder?: string; quarterPlaceholder?: string; monthPlaceholder?: string; weekPlaceholder?: string; rangeYearPlaceholder?: [string, string]; rangeQuarterPlaceholder?: [string, string]; rangeMonthPlaceholder?: [string, string]; rangeWeekPlaceholder?: [string, string]; rangePlaceholder?: [string, string]; }; type InjectDefaultProps = Omit & { locale?: PickerLocale; size?: SizeType; placement?: DataPickerPlacement; /** @deprecated Use `variant` instead */ bordered?: boolean; status?: InputStatus; /** * @since 5.13.0 * @default "outlined" */ variant?: Variant; /** * @deprecated `dropdownClassName` is deprecated which will be removed in next major * version.Please use `popupClassName` instead. */ dropdownClassName?: string; popupClassName?: string; rootClassName?: string; popupStyle?: React.CSSProperties; }; /** Base Single Picker props */ export type PickerProps = InjectDefaultProps< RcPickerProps >; /** Base Range Picker props */ export type RangePickerProps = InjectDefaultProps< RcRangePickerProps >; export type GenericTimePickerProps = Omit< PickerProps, 'picker' | 'showTime' > & { /** @deprecated Please use `onCalendarChange` instead */ onSelect?: (value: DateType) => void; }; /** * Single Picker has the `multiple` prop, * which will make the `value` be `DateType[]` type. * Here to be a generic which accept the `ValueType` for developer usage. */ export type PickerPropsWithMultiple< DateType extends AnyObject = any, InnerPickerProps extends PickerProps = PickerProps, ValueType = DateType, > = Omit & React.RefAttributes & { defaultValue?: ValueType | null; value?: ValueType | null; onChange?: (date: ValueType, dateString: string | string[]) => void; onOk?: (date: ValueType) => void; };