import type { CSSProperties, ReactNode } from 'react';
import type { Dayjs } from 'dayjs';
/**
 * value / defaultValue 的 dayjs 兼容类型（组件内部统一为 Dayjs）
 */
export declare type TimeNavigatorValue = Dayjs | string | null;
/**
 * 时间范围（HH:mm 或 HH:mm:ss，相对 referenceDate 的营业日）
 * - 同自然日：如 08:00–22:00
 * - 跨日：结束钟面 ≤ 开始时视为次日结束，如 02:01–02:00 表示至次日 02:00
 */
export interface TimeRangeOption {
    start: string;
    end: string;
}
/**
 * 拖动/指示器模式
 * - axis-moves：指示器固定视口中央，刻度移动（默认）
 * - cursor-moves：刻度固定，指示器在轴上移动
 */
export declare type CursorMode = 'axis-moves' | 'cursor-moves';
/**
 * 布局方向
 */
export declare type TimeNavigatorOrientation = 'horizontal' | 'vertical';
/**
 * PisellTimeNavigator 组件 Props
 */
export interface PisellTimeNavigatorProps {
    /**
     * 当前选中时间（受控）。支持 dayjs 实例或可被 dayjs 解析的字符串
     */
    value?: TimeNavigatorValue;
    /**
     * 时间变更回调（受控时必传）
     */
    onChange?: (value: Dayjs) => void;
    /**
     * 默认选中时间（非受控）
     */
    defaultValue?: TimeNavigatorValue;
    /**
     * 时间轴锚定到的日历日（startOf day）。`range` 的 HH:mm 均相对于该日。
     * 不传则与历史一致：取「当天」0 点，避免跨天后刻度错位。
     */
    referenceDate?: TimeNavigatorValue;
    /**
     * 是否 Realtime 模式：value 自动跟随系统当前时间更新
     * @default false
     */
    realtime?: boolean;
    /**
     * 时间范围（支持跨日营业，见 {@link TimeRangeOption}）。不传则默认当日 00:00–24:00
     */
    range?: TimeRangeOption;
    /**
     * 吸附步长（分钟），如 15、30、60
     * @default 15
     */
    stepMinutes?: number;
    /**
     * 大刻度间隔（分钟），用于整点刻度；不传则与 stepMinutes 一致或 60
     * @default 60
     */
    majorStepMinutes?: number;
    /**
     * 指示器/轴移动模式
     * @default 'axis-moves'
     */
    cursorMode?: CursorMode;
    /**
     * 横向或竖向展示
     * @default 'horizontal'
     */
    orientation?: TimeNavigatorOrientation;
    /**
     * 营业时间范围（视觉高亮，可选限制选择范围）
     */
    businessHours?: TimeRangeOption;
    /**
     * 禁用时间段，禁止选中（点击/吸附到该区间无效）
     */
    disabledRanges?: TimeRangeOption[];
    /**
     * 是否显示 Now 按钮（固定入口）
     * @default true
     */
    showNowButton?: boolean;
    /**
     * 为 true 时禁止用户拖动/滚动时间轴、点击刻度改时间（仍随 `value` 程序性对齐视口；用于「跟随当前时刻」等只读轴）
     * @default false
     */
    userInteractionLocked?: boolean;
    /**
     * 是否吸附到 step 刻度
     * @default false
     */
    snapToStep?: boolean;
    /**
     * 是否开启惯性滚动（拖动松手后减速）
     * @default false
     */
    inertia?: boolean;
    /**
     * 过去时间淡化背景色（CSS 颜色值）
     */
    pastTimeFade?: string;
    /**
     * 容器样式覆盖
     */
    containerStyle?: CSSProperties;
    /**
     * 刻度层样式覆盖
     */
    scaleStyle?: CSSProperties;
    /**
     * 时间气泡/竖线样式覆盖（区分 realtime 时由组件内部应用主题色）
     */
    cursorStyle?: CSSProperties;
    /**
     * Now 按钮样式覆盖
     */
    nowButtonStyle?: CSSProperties;
    /**
     * 自定义类名
     */
    className?: string;
    /**
     * 根节点自定义样式
     */
    style?: CSSProperties;
    /**
     * dayjs locale
     */
    locale?: string;
    /**
     * 时间气泡展示格式（dayjs format）
     * @default 'HH:mm'
     */
    timeFormat?: string;
    /**
     * 自定义 Now 按钮内容（覆盖默认文案与图标时使用）
     */
    renderNowButton?: () => ReactNode;
    /**
     * 横向轴上与刻度槽位数一致的密度序列（任意正数，内部按最大值归一化折线高度）
     */
    densitySeries?: number[];
    /**
     * 未传 `densitySeries` 时按 `referenceDate` 拉取；日历日变更会重新请求，过期响应丢弃
     */
    loadDensity?: (params: {
        referenceDate: Dayjs;
        stepMinutes: number;
    }) => Promise<number[]>;
    /**
     * 用户开始操作时间轴（拖轴、点刻度、键盘、拖指针等）时回调；用于上层关闭「跟随当前」等。
     */
    onUserInteraction?: () => void;
}
