import React from 'react'; import { HiBaseHTMLProps, HiBaseSizeEnum } from '@hi-ui/core'; import { PopperOverlayProps } from '@hi-ui/popper'; import { TimePickerPanelType, TimePickerValue } from '@hi-ui/time-picker'; import { CalendarColInfo } from './hooks/useCalenderData'; import { Moment } from 'moment'; import type { ComponentSemantic, SemanticClassNamesType, SemanticStylesType } from '@hi-ui/use-merge-semantic'; export declare type CalendarViewEnum = 'date' | 'year' | 'month' | 'quarter'; export interface DateRange { start: Date | string | number | undefined | null; end: Date | string | number | undefined | null; } export interface CalendarDataItem { /** * 日期 */ date: DatePickerValue; /** * 描述内容 */ content: string; /** * 是否高亮展示 * @default false */ highlighted?: boolean; } export interface CalendarItemV3 { date: Date | string | number | null; text: string; /** * @default false */ highlight?: boolean; } /** * 组件内部使用,格式化之后的历法item */ export interface FormatCalendarItem { date: string; text?: string | null | number; /** * @default false */ highlight?: boolean; /** * 节点标记 */ nodeMark?: React.ReactNode; /** * 节气名称 */ name?: string; FullText?: string; } /** * 组件内部使用,历法信息 * key -> YYYY/MM/DD */ export interface CalendarAltCalendarPreset { [key: string]: FormatCalendarItem; } /** * 组件内部使用,日历标签信息(休/班) * key -> YYYY/MM/DD */ export interface CalendarMarkPreset { [key: string]: React.ReactNode; } export declare type DatePickerValueV3 = Date | string | number | DateRange | undefined | null; export declare type DatePickerValue = Date | string | number | null; export declare type DatePickerOnChangeDate = Date | Date[] | null; export declare type DatePickerOnChangeDateString = string | string[] | null; export declare type DatePickerOnChange = (date: Date | Date[] | undefined, dateStr: string | string[] | undefined) => void; export declare type DatePickerOnChangeV3 = (date: Date | DateRange, dateStr: string | DateRange) => void; export declare type DatePickerTypeEnum = 'date' | 'daterange' | 'year' | 'month' | 'week' | 'quarter' | 'weekrange' | 'timeperiod' | 'yearrange' | 'monthrange' | 'quarterrange'; export declare type DatePickerAltCalendarPresetEnum = 'zh-CN' | 'id-ID'; export declare type DateMarkRender = (currentDate: number, today: number) => React.ReactNode; export declare type DisabledDate = (currentDate: Date, view: CalendarViewEnum, panelIndex?: number) => boolean; export interface DatePickerProps extends Omit, 'placeholder'>, DatePickerSemantic { /** * 选择器类型 */ type?: DatePickerTypeEnum; /** * 默认显示的日期 */ defaultValue?: DatePickerValue | DatePickerValue[]; /** * 日期 */ value?: DatePickerValue | DatePickerValue[]; /** * 最小日期 */ minDate?: Date; /** * 最大日期 */ maxDate?: Date; /** * UTC时间偏移量,单位为小时。例如:东八区传入8,西五区传入-5 */ utcOffset?: number; /** * 是否禁用 * @default false */ disabled?: boolean; /** * 设置输入框为只读 * @default false */ inputReadOnly?: boolean; /** * 不可选择的日期(返回true为不可选) * @default () => false */ disabledDate?: (currentDate: Date, view: CalendarViewEnum, panelIndex?: number) => boolean; /** * 是否可以清空 * @default true */ clearable?: boolean; /** * 是否在日期选择器中显示时间选择器,在使用时请注意 format 的设置。 * 传入对象时等价于开启时间选择,且可通过 `defaultOpenValue` 在未选择日期时指定时间列的默认展示(与 `defaultPickerValue` 独立,仅影响时间滚轮)。 * @default false */ showTime?: boolean | { defaultOpenValue?: TimePickerValue[] | TimePickerValue; }; /** * 时间段的间隔,以分钟为单位 * @default 240 */ timeInterval?: number; /** * 展示的日期格式,配置参考 [moment.js](http://momentjs.cn/docs/#/displaying/format/) */ format?: string | ((date: Moment) => string); /** * 快捷面板 */ shortcuts?: string[] | { title: string; range: (Date | number)[]; }[]; /** * @private */ theme?: any; /** * @private */ locale?: string; /** * 周起始,默认周日做为第一列(3.3.0版本后,优化为根据中英文自动设置周起始) * @default 0 */ weekOffset?: number; /** * 小时步进 */ hourStep?: number; /** * 分钟步进 */ minuteStep?: number; /** * 秒钟步进 */ secondStep?: number; /** * 输入框占位符 */ placeholder?: string | string[]; /** * 自定义日期中历法展示信息 */ altCalendar?: CalendarDataItem[]; /** * 预置历法信息(支持中国农历和印度节假日) */ altCalendarPreset?: DatePickerAltCalendarPresetEnum; /** * 自定义日期的右上角标记 */ dateMarkRender?: (currentDate: number, today: number) => React.ReactNode; /** * 预置日期的右上角标记(休 | 班) */ dateMarkPreset?: string; /** * 禁止选择的小时,仅在 showTime 开启时生效 */ disabledHours?: ((panel: TimePickerPanelType) => number[]) | number[]; /** * 禁止选择的分钟,仅在 showTime 开启时生效 */ disabledMinutes?: ((selectedHour: number, panel: TimePickerPanelType) => number[]) | number[]; /** * 禁止选择的秒数,仅在 showTime 开启时生效 */ disabledSeconds?: ((selectedHour: number, selectedMinute: number, panel: TimePickerPanelType) => number[]) | number[]; /** * 选择日期的回调函数,(data: 选中的 moment 日期对象, isCompleted: 是否选择完成,仅在范围选择下有效,panelIndex: 当前操作面板索引) => void */ onSelect?: (data: Date, isCompleted: boolean, panelIndex?: number) => void; /** * 选择后的回调,(date: 选中的日期,dateStr: 选中的日期字符串) => void */ onChange?: (date: Date | Date[] | null, dateStr: string | string[] | null) => void; /** * 日期面板改变时的回调函数 */ onPanelChange?: (data: Date) => void; /** * 不同 UI 外观 * @default 'line' */ appearance?: 'line' | 'unset' | 'filled' | 'borderless' | 'contained'; /** * 设置输入框 label 内容,仅在 appearance 为 contained 时生效 */ label?: React.ReactNode; /** * 不同尺寸 * @default 'md' */ size?: HiBaseSizeEnum; /** * 自定义控制弹出层 popper */ overlay?: PopperOverlayProps; /** * 是否非法 * @default false */ invalid?: boolean; /** * 面板打开时回调 */ onOpen?: () => void; /** * 面板关闭时回调 */ onClose?: () => void; /** * 清空时回调 */ onClear?: () => void; /** * 自定义单元格内容 */ cellRender?: (colInfo: CalendarColInfo, date: Moment) => React.ReactNode; /** * 自定义渲染页脚 */ footerRender?: (actionContents: React.ReactElement, onPick: (dates: (Moment | Date | null)[], isShowPanel?: boolean) => void) => React.ReactNode; /** * 跨月选择模式 * 'auto' 自动切换模式,跨月选择时自动切换到跨月的日期选择面板; * 'fixed' 固定模式,不自动切换(仅周范围选择下生效) * @default 'auto' */ strideSelectMode?: 'auto' | 'fixed'; /** * 自定义触发器 */ customRender?: React.ReactNode | ((option: (Date | undefined)[]) => React.ReactNode); /** * 选择框前置内容 */ prefix?: React.ReactNode; /** * 是否需要确认按钮,为 false 时失去焦点即代表选择。日期时间范围选择默认为 true * @default false */ needConfirm?: boolean; /** * 点击确认按钮的回调 */ onConfirm?: (date: Date | Date[]) => void; /** * 是否显示日期选择器 */ visible?: boolean; /** * 默认面板显示的日期,当用户没有传入或选择日期时,选择面板基于此值来显示日期 */ defaultPickerValue?: DatePickerValue | DatePickerValue[]; /** * 是否展示指示器 * @default true */ showIndicator?: boolean; /** * 是否展示周,仅在 type 为 date 或 daterange 时生效 */ showWeek?: boolean; } /** DatePicker 语义化元素名称 */ export declare type DatePickerSemanticName = 'root' | 'popper' | 'picker' | 'pickerWrapper' | 'prefix' | 'pickerLabel' | 'inputSelector' | 'inputConnection' | 'inputContainer' | 'input' | 'inputShadow' | 'triggerIcon' | 'panel' | 'panelLeft' | 'panelHeader' | 'panelTimeContainer' | 'panelTimeHeader' | 'panelTimeContent' | 'footer' | 'calendarWrap' | 'calendar' | 'calendarHead' | 'calendarRow' | 'calendarCell' | 'calendarCellText' | 'calendarCellNum' | 'calendarHoliday' | 'calendarHolidayText'; export declare type DatePickerSemanticClassNames = SemanticClassNamesType; export declare type DatePickerSemanticStyles = SemanticStylesType; /** 语义化 classNames/styles 的解析结果类型,用于 context 等内部传递 */ export declare type DatePickerSemanticClassNamesResolved = Partial>; export declare type DatePickerSemanticStylesResolved = Partial>; export declare type DatePickerSemantic = ComponentSemantic;