/// <reference types="react" />
import type { NativeProps } from "../../../utils/with-native-props";
import type { CnTimePickerProps } from "../../cn-time-picker-pro";
import { PanelMode } from './panel-mode';
import { Page } from '../convert';
export type CnCalendarProps = {
    /**
     * 导航窗格上的“上一月”按钮的内容
     */
    prevMonthButton?: React.ReactNode;
    /**
     * 导航窗格上的“上一年”按钮的内容
     */
    prevYearButton?: React.ReactNode;
    /**
     * 导航窗格上的“下一月”按钮的内容
     */
    nextMonthButton?: React.ReactNode;
    /**
     * 导航窗格上的“下一年”按钮的内容
     */
    nextYearButton?: React.ReactNode;
    /**
     * 切换月或年时触发
     */
    onPageChange?: (year: number, month: number) => void;
    /**
     * 每周以周几作为第一天
     */
    weekStartsOn?: 'Monday' | 'Sunday';
    /**
     * 标注信息的渲染函数
     */
    renderLabel?: (date: Date) => React.ReactNode;
    /**
     * 是否允许再次点击后清除
     */
    allowClear?: boolean;
    /**
     * 可选择范围的最大值
     */
    max?: Date;
    /**
     * 可选择范围的最小值
     */
    min?: Date;
    /**
     * 判断日期是否可选，使用后会忽略 min 和 max 设置
     */
    disabledDate?: (date: Date, mode: 'date') => boolean;
    /**
     * 是否显示时间
     */
    showTime?: boolean;
    /**
     * 时间选择器的属性
     */
    timePanelProps?: CnTimePickerProps;
    /**
     * 可切换到的最早日期
     */
    minPage?: Page;
    /**
     * 可切换到的最晚日期
     */
    maxPage?: Page;
    /**
     * 面板展示类型
     */
    panelMode?: PanelMode;
    /**
     * 自定义日期渲染 `v0.12.6+`
     * @since 0.12.6
     */
    renderDate?: (date: Date) => React.ReactNode;
} & ({
    /**
     * 选择模式
     */
    selectionMode?: undefined;
    /**
     * 值
     */
    value?: undefined;
    /**
     * 默认值
     */
    defaultValue?: undefined;
    /**
     * 值变化时触发的回调函数
     */
    onChange?: undefined;
} | {
    selectionMode: 'single';
    value?: Date | null;
    defaultValue?: Date | null;
    onChange?: (val: Date | null) => void;
} | {
    selectionMode: 'range';
    value?: [Date, Date] | null;
    defaultValue?: [Date, Date] | null;
    onChange?: (val: [Date, Date] | null) => void;
} | {
    selectionMode: 'range';
    panelMode: 'week';
    value?: [Date, Date] | null;
    defaultValue?: [Date, Date] | null;
    onChange?: (val: [Date, Date] | null, weekStr: [string, string] | null) => void;
}) & NativeProps;
