import { Dayjs } from 'dayjs'; import { CSSProperties, ReactNode } from 'react'; import { TimePickerProps } from '../time-picker/interface'; import { TriggerProps } from '../trigger/index'; import { Omit } from '../../utils/type'; export declare type CalendarValue = number | string | Date | Dayjs; export declare type ShortcutType = { text: ReactNode; value: () => Dayjs | Dayjs[]; } & Record; export declare type IconsType = { prev?: ReactNode; prevDouble?: ReactNode; next?: ReactNode; nextDouble?: ReactNode; inputSuffix?: ReactNode; }; export declare type DisabledTimeProps = { disabledHours?: () => number[]; disabledMinutes?: () => number[]; disabledSeconds?: () => number[]; }; export declare type DisabledRangeTimeFunc = (current: Dayjs, type: 'start' | 'end') => DisabledTimeProps; export declare type DisabledTimeFunc = (current?: Dayjs) => DisabledTimeProps; export declare type ModeType = 'date' | 'month' | 'week' | 'year' | 'quarter'; export declare type PrivateCType = { setPageShowDate?: (d: Dayjs) => void; getHeaderOperations?: (mode?: ModeType) => { onPrev?: () => void; onNext?: () => void; onSuperPrev?: () => void; onSuperNext?: () => void; }; }; /** * @title Picker Props */ export interface PickerProps { style?: CSSProperties; className?: string | string[]; /** * 是否禁用 */ disabled?: boolean | boolean[]; /** * 允许清除 * @defaultValue true */ allowClear?: boolean; /** * 每周的第一天开始于周几,0 - 周日,1 - 周一,以此类推。 */ dayStartOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6; /** * 弹出的框的位置 */ position?: 'top' | 'tl' | 'tr' | 'bottom' | 'bl' | 'br'; /** * 弹出框挂载的父节点 * @defaultValue bl */ getPopupContainer?: (node: HTMLElement) => Element; /** * 提示文案 */ placeholder?: string | string[]; /** * 预设时间范围快捷选择 */ shortcuts?: ShortcutType[]; /** * 预设范围选择放在面板左侧,用于大量预设时间的场景。 */ shortcutsPlacementLeft?: boolean; /** * 静态模式 */ quickStatic?: boolean; /** * 快速编辑(默认无边框) */ quickEdit?: boolean; /** * 状态 */ status?: 'error' | 'warning'; /** * 前缀 */ prefix?: ReactNode; /** * 是否在隐藏的时候销毁 DOM 结构 */ unmountOnExit?: boolean; /** * 日期选择器的尺寸 * @defaultValue middle */ size?: 'small' | 'middle' | 'large'; /** * 指定弹框打开或者关闭状态。 */ popupVisible?: boolean; /** * 打开或关闭时的回调 */ onVisibleChange?: (visible?: boolean) => void; /** * 日历组件值发生改变时的回调 */ onChange?: (dateString: string, date: Dayjs) => void; /** * 选中日期发生改变但组件值未改变时的回调 */ onSelect?: (dateString: string, date: Dayjs) => void; /** * 点击清除按钮后的回调 */ onClear?: () => void; /** * 自定义日期单元格的内容。 */ dateRender?: (currentDate: Dayjs) => ReactNode; /** * 自定义渲染面板 */ panelRender?: (panelNode: ReactNode) => ReactNode; /** * 是否可输入。 * @defaultValue true */ editable?: boolean; /** * 可以传入 `Trigger` 组件的参数。 */ triggerProps?: Partial; /** * 点击快捷选择时的回调。 */ onSelectShortcut?: (shortcut: ShortcutType) => void; /** * 日历翻页的图标配置。 */ icons?: { prev?: ReactNode; prevDouble?: ReactNode; next?: ReactNode; nextDouble?: ReactNode; inputSuffix?: ReactNode; }; /** * @zh * 国际化配置 */ locale?: Record; /** * 范围选择器输入框内的分割符号 */ separator?: ReactNode; /** * 不可选取的日期 */ disabledDate?: (current: Dayjs) => boolean; /** * 额外的页脚 */ extra?: ReactNode; /** * 点击确认按钮的回调 */ onOk?: (dateString: string, date: Dayjs) => void; /** * 触发元素。 */ triggerElement?: ReactNode; /** * 默认面板显示的日期 */ defaultPickerValue?: CalendarValue; /** * 面板显示的日期。 */ pickerValue?: CalendarValue; /** * 面板日期改变的回调。 */ onPickerValueChange?: (dateString: string, value: Dayjs) => void; /** * 面板隐藏不在当前时间范围的灰色日期 */ hideNotInViewDates?: boolean; /** * 设置时区偏移,如果需要 utc 时间则设置为 0。 */ utcOffset?: number; /** * 设置时区, 如果设置了 `utcOffset`,则以 `utcOffset` 为准。 */ timezone?: string; /** * 原生输入框属性 */ inputProps?: React.InputHTMLAttributes; } /** * @title DatePicker * `type CalendarValue = number | string | Date | Dayjs`。 */ export interface BaseDatePickerProps { /** * 展示日期的格式,参考[dayjs](https://github.com/iamkun/dayjs)。使用 `string` 时,可以手动键入和编辑日期。使用 `(value: Dayjs) => string` 时,只能在 Picker 中选取日期。 * @defaultValue YYYY-MM-DD */ format?: string | ((value: Dayjs) => string); /** * 默认日期 */ defaultValue?: CalendarValue; /** * 日历组件的值 */ value?: CalendarValue; /** * 是否增加时间选择 */ showTime?: boolean | TimePickerProps; /** * 时间显示的参数,参考 [TimePickerProps](/react/components/time-picker),作用同 `showTime`。 */ timepickerProps?: TimePickerProps; /** * 是否显示 `showTime` 时,选择当前时间的按钮。 * @defaultValue true */ showNowBtn?: boolean; /** * 不可选取的时间 */ disabledTime?: (current?: Dayjs) => DisabledTimeProps; } export declare type DatePickerProps = BaseDatePickerProps & PickerProps; /** * @title WeekPicker */ export interface BaseWeekPickerProps { /** * 展示日期的格式,参考[dayjs](https://github.com/iamkun/dayjs) * @defaultValue gggg-wo */ format?: string; /** * 默认日期 */ defaultValue?: CalendarValue; /** * 日历组件的值 */ value?: CalendarValue; } export declare type WeekPickerProps = BaseWeekPickerProps & PickerProps; /** * @title MonthPicker */ export interface BaseMonthPickerProps { /** * 展示日期的格式,参考[dayjs](https://github.com/iamkun/dayjs) * @defaultValue YYYY-MM */ format?: string; /** * 默认日期 */ defaultValue?: CalendarValue; /** * 日历组件的值 */ value?: CalendarValue; } export declare type MonthPickerProps = BaseMonthPickerProps & PickerProps; /** * @title YearPicker */ export interface BaseYearPickerProps { /** * 展示日期的格式,参考[dayjs](https://github.com/iamkun/dayjs) * @defaultValue YYYY */ format?: string; /** * 默认日期 */ defaultValue?: CalendarValue; /** * 日历组件的值 */ value?: CalendarValue; } export declare type YearPickerProps = BaseYearPickerProps & PickerProps; /** * @title QuarterPicker */ export interface BaseQuarterPickerProps { /** * 展示日期的格式,参考[dayjs](https://github.com/iamkun/dayjs) * @defaultValue YYYY-[Q]Q */ format?: string; /** * 默认日期 */ defaultValue?: CalendarValue; /** * 日历组件的值 */ value?: CalendarValue; } export declare type QuarterPickerProps = BaseQuarterPickerProps & PickerProps; export declare type TimePickerRangeProps = Omit & { defaultValue?: CalendarValue[]; }; /** * @title RangePicker */ export interface BaseRangePickerProps { /** * 是否禁用 */ disabled?: boolean | boolean[]; /** * 展示日期的格式,参考[dayjs](https://github.com/iamkun/dayjs) * @defaultValue YYYY-MM-DD */ format?: string | string[]; /** * 日历组件值发生改变时的回调 */ onChange?: (dateString: string[], date: Dayjs[]) => void; /** * 选中日期发生改变但组件值未改变时的回调 */ onSelect?: (dateString: string[], value: Dayjs[], extra: { type: 'start' | 'end'; }) => void; /** * 默认日期 */ defaultValue?: CalendarValue[]; /** * 日历组件的值 */ value?: CalendarValue[]; /** * 范围选择器的类型,可以是日期、月份。 * @defaultValue date */ mode?: 'date' | 'month' | 'week' | 'year' | 'quarter'; /** * 是否增加时间选择,如果传入的是个对象,会把参数传给内置的 TimePicker。 */ showTime?: boolean | TimePickerRangeProps | TimePickerProps; /** * 提示文案 */ placeholder?: string[]; /** * 时间显示的参数,参考 [TimePickerProps](/react/components/time-picker),作用同 `showTime`。 */ timepickerProps?: TimePickerProps; /** * 点击确认按钮的回调 */ onOk?: (dateString: string[], date: Dayjs[]) => void; /** * 不可选取的时间 */ disabledTime?: (current: Dayjs, type: 'start' | 'end') => DisabledTimeProps; /** * 触发元素。 */ triggerElement?: ReactNode; /** * 默认面板显示的日期 */ defaultPickerValue?: CalendarValue[]; /** * 面板显示的日期。 */ pickerValue?: CalendarValue[]; /** * 面板日期改变的回调。 */ onPickerValueChange?: (dateString: string[], value: Dayjs[]) => void; /** * 当重新选择范围的时候,会清空之前的范围重新进行选择 */ clearRangeOnReselect?: boolean; /** * 原生输入框属性 */ inputProps?: React.InputHTMLAttributes[]; } export declare type RangePickerProps = BaseRangePickerProps & Omit; export interface ShortcutsProps { prefixCls?: string; shortcuts?: ShortcutType[]; onSelectShortcut?: (shortcut: ShortcutType, e: any) => void; onMouseEnterShortcut?: (e: any) => void; onMouseLeaveShortcut?: (e: any) => void; showNowBtn?: boolean; onSelectNow?: () => void; nowText?: ReactNode; showTime?: boolean | TimePickerProps; } export declare type DatePickerHandle = { focus: () => void; blur: () => void; }; export declare type RangePickerHandle = { focus: (index?: number) => void; blur: () => void; }; export interface DatePickerDecorator extends React.ComponentClass { MonthPicker: React.ComponentClass; YearPicker: React.ComponentClass; WeekPicker: React.ComponentClass; QuarterPicker: React.ComponentClass; RangePicker: React.ForwardRefExoticComponent>; }