import '../range-input'; import './panel/RangePanel'; import 'tdesign-icons-web-components/esm/components/calendar'; import { Component, OmiProps } from 'omi'; import { StyledProps } from '../common'; import { TdDateRangePickerProps } from './type'; export interface DateRangePickerProps extends Omit, Omit { style?: TdDateRangePickerProps['style']; } export default class DateRangePicker extends Component { static defaultProps: Partial; static propTypes: { value: ArrayConstructor; defaultValue: ArrayConstructor; popupVisible: BooleanConstructor; defaultPopupVisible: BooleanConstructor; format: StringConstructor; mode: StringConstructor; disabled: BooleanConstructor; presets: ObjectConstructor; presetsPlacement: StringConstructor; placeholder: (ArrayConstructor | StringConstructor)[]; tips: (ObjectConstructor | FunctionConstructor | StringConstructor)[]; status: StringConstructor; clearable: BooleanConstructor; cancelRangeSelectLimit: BooleanConstructor; panelPreselection: BooleanConstructor; separator: (ObjectConstructor | FunctionConstructor | StringConstructor)[]; onChange: FunctionConstructor; onPick: FunctionConstructor; onClear: FunctionConstructor; onVisibleChange: FunctionConstructor; onPresetClick: FunctionConstructor; }; private classPrefix; private formatInfo; private valueState; private setValueState; private popupVisibleState; private setPopupVisibleState; private inputValueSignal; private cacheValueSignal; private placeholderSignal; private yearSignal; private monthSignal; private activeIndexSignal; private isHoverCellSignal; private isFirstValueSelectedSignal; private hoverValueSignal; install(): void; ready(): void; receiveProps(nextProps: OmiProps): void; /** * 初始化受控状态,设置值和弹窗的受控逻辑 */ private initializeControlled; /** * 设置值的受控逻辑 */ private setupValueControl; /** * 设置弹窗的受控逻辑 */ private setupPopupControl; /** * 同步派生状态 * 根据当前值更新输入框、缓存值、年月面板 */ private syncDerivedState; /** * 处理弹窗显隐变化 * 打开时重置选择状态,关闭时恢复缓存值并清空placeholder */ private handlePopupVisibleChange; /** * 处理清空按钮点击 * 清空所有值并关闭弹窗 */ private handleClear; /** * 日期范围选择逻辑 * 首次点击:设置一端日期,清空另一端,切换到另一端的选择 * 第二次点击:设置另一端日期,自动交换顺序 */ private handleCellClick; /** * 日期单元格mouse enter * 更新placeholder */ private handleCellMouseEnter; /** * 日期单元格鼠标mouse leave * 清空placeholder */ private handleCellMouseLeave; /** * 确保左侧面板的年月不大于右侧面板 */ private dateCorrection; /** * 处理年月面板快速切换(上一页/下一页/今天) * 根据mode计算跳转月数,进行日期纠正 */ private handlePanelJumperClick; /** 处理月份选择器变化,进行日期纠正 */ private handlePanelMonthChange; /** 处理年份选择器变化,进行日期纠正 */ private handlePanelYearChange; /** * 处理预设按钮点击 * 解析预设值数组,更新选中值和面板状态 */ private handlePresetClick; /** 处理范围输入框变化,检测清空操作 */ private handleRangeInputChange; private renderPanel; render(props: OmiProps): JSX.Element; }