import { ReactNode } from 'react';
import { SimpleValue } from '../../base/atoms';
import { BaseProps } from '../../base/props';
export interface CalendarDay {
    day: SimpleValue;
    type: string;
    month?: SimpleValue;
    year?: SimpleValue;
}
export interface CalendarMonthInfo {
    curData: string[] | string;
    title: string;
    monthData: CalendarDay[];
    cssHeight: number;
    scrollTop: number;
}
export type CalendarValue = string | string[];
export type CalendarType = 'single' | 'range' | 'multiple' | 'week';
export type CalendarRef = {
    scrollToDate: (date: string) => void;
};
export interface BaseCalendar {
    /**
    * 类型，日期选择'single'，区间选择'range'
    */
    type: CalendarType
    /**
    * 自动回填
    */
    autoBackfill: boolean
    /**
    * 是否弹窗状态展示
    */
    popup: boolean
    /**
    * 是否可见
    */
    visible: boolean
    /**
    * 显示标题
    */
    title: string
    /**
    * 默认值，日期选择 string 格式，区间选择 Array 格式
    */
    defaultValue: string | string[]
    /**
    * 开始日期， 如果不限制开始日期传 null
    */
    startDate: string
    /**
    * 结束日期，如果不限制结束日期传 null
    */
    endDate: string
    /**
    * 是否展示今天标记
    */
    showToday: boolean
    /**
    * 范围选择，开始信息文案
    */
    startText: ReactNode
    /**
    * 范围选择，结束信息文案
    */
    endText: ReactNode
    /**
    * 底部确认按钮文案
    */
    confirmText: ReactNode
    /**
    * 是否在展示日历标题
    */
    showTitle: boolean
    /**
    * 是否展示日期标题
    */
    showSubTitle: boolean
    /**
    * 是否启动滚动动画
    */
    scrollAnimation: boolean
    /**
    * 设置周起始日
    */
    firstDayOfWeek: number
    /**
    * 自定义 Icon
    */
    closeIcon?: ReactNode
    /**
    * 设置不可选日期
    */
    disableDate: (date: CalendarDay) => boolean
    /**
    * 自定义日历标题下部，可用以添加自定义操作
    */
    renderHeaderButtons?: () => string | JSX.Element
    /**
    * 自定义日历底部按钮
    */
    renderBottomButton?: () => string | JSX.Element
    /**
    * 日期信息
    */
    renderDay?: (date: CalendarDay) => string | JSX.Element
    /**
    * 日期顶部信息
    */
    renderDayTop?: (date: CalendarDay) => string | JSX.Element
    /**
    * 日期底部信息
    */
    renderDayBottom?: (date: CalendarDay) => string | JSX.Element
    /**
    * 关闭时触发
    */
    onClose: () => void
    /**
    * 选择之后或是点击确认按钮触发
    */
    onConfirm: (param: string) => void
    /**
    * 点击/选择后触发
    */
    onDayClick: (data: string[]) => void
    /**
    * 年月子标题到达顶部时触发
    */
    onPageChange: (param: string) => void
}
export interface BaseCalendarItem extends BaseProps {
    type: CalendarType;
    autoBackfill: boolean;
    popup: boolean;
    title: string;
    value: CalendarValue;
    defaultValue: CalendarValue;
    startDate: CalendarValue;
    endDate: CalendarValue;
    showToday: boolean;
    startText: ReactNode;
    endText: ReactNode;
    confirmText: ReactNode;
    showTitle: boolean;
    showSubTitle: boolean;
    scrollAnimation: boolean;
    firstDayOfWeek: number;
    disableDate: (date: CalendarDay) => boolean;
    renderHeaderButtons: () => string | JSX.Element;
    renderBottomButton: () => string | JSX.Element;
    renderDay: (date: CalendarDay) => string | JSX.Element;
    renderDayTop: (date: CalendarDay) => string | JSX.Element;
    renderDayBottom: (date: CalendarDay) => string | JSX.Element;
    onConfirm: (data: string) => void;
    onUpdate: () => void;
    onDayClick: (data: string) => void;
    onPageChange: (data: any) => void;
}
