import { type Dayjs } from 'dayjs';
import type { TimeNavigatorValue, TimeRangeOption } from '../types';
/**
 * 解析 value 为 Dayjs，无效则返回 null。
 * 支持 dayjs 可解析的日期时间；纯时间字符串（如 '12:00'、'14:30'）会基于 reference 的日期解析。
 */
export declare function parseValue(value: TimeNavigatorValue, reference?: Dayjs): Dayjs | null;
/** 日历时间轴默认步长（分钟），与历史「整点列」一致 */
export declare const DEFAULT_CALENDAR_SLOT_STEP_MINUTES = 60;
/**
 * 按营业日 {@link TimeRangeOption} 在锚定自然日零点展开，生成日视图时间轴「列左边界」：
 * 值为相对 `reference.startOf('day')` 的**浮点小时**（可 ≥24，表示次日时刻），步长为 `slotStepMinutes`。
 */
export declare function buildCalendarTimelineSlotStartsFromRange(range: TimeRangeOption | undefined, anchorDate: Date | Dayjs, slotStepMinutes?: number): number[];
/**
 * @deprecated 语义上等价于 {@link buildCalendarTimelineSlotStartsFromRange}(..., 60)；保留兼容导出。
 */
export declare function buildCalendarHourSlotsFromRange(range: TimeRangeOption | undefined, anchorDate: Date | Dayjs): number[];
/**
 * 将 range 转为 [startDayjs, endDayjs]（reference 为营业锚定日的 0 点）
 * - 同日内：如 08:00–22:00
 * - 跨日营业：结束钟面早于或等于开始（如 02:01–次日 02:00）时，end 解析为 reference 的次日同一时刻
 */
export declare function getRangeBounds(range: TimeRangeOption | undefined, reference: Dayjs): [Dayjs, Dayjs];
/**
 * 自动挑选「能让 `now` 落入 [refDay + range.start, refDay + range.end] 营业窗口」的锚定日。
 *
 * 调用方未显式传入 `referenceDate` 时使用：保证当前时刻始终在轴可视范围内，
 * 横向「现在」橙色高亮 / 竖向当前时间横线永远展示。
 *
 * 解析顺序：
 * 1. 先尝试 `now.startOf('day')`（典型场景：跨日营业 18:00–04:00 时，下午 20:00 直接命中今天的窗口）；
 * 2. 命中失败时尝试前一日（如营业 16:00–次日 16:00，now = 中午 12:00 时窗口需锚到昨天）；
 * 3. 再尝试次日（如营业 16:00–次日 16:00，now 处于「即将进入下一个营业日」的边界附近）；
 * 4. 三个候选都不包含 now（营业时段较短且 now 落在闭店时段，如 09:00–22:00 + now=23:00）时，
 *    回退到 `now.startOf('day')`，保持原有行为，不强行扭曲日期。
 */
export declare function pickReferenceDateContainingNow(range: TimeRangeOption | undefined, now: Dayjs): Dayjs;
/**
 * 将时间吸附到 step 分钟刻度（0、15、30、45 等）：四舍五入到最近刻度。
 */
export declare function snapToStepMinutes(t: Dayjs, stepMinutes: number): Dayjs;
/**
 * 判断时间是否落在任一禁用区间内（按绝对时间与区间 [start,end) 比较）
 * 注：与主时间轴同 reference 的跨日 range 一致时需传入同一营业锚定日解析出的区间。
 */
export declare function isInDisabledRanges(t: Dayjs, disabledRanges: TimeRangeOption[] | undefined): boolean;
/**
 * 在 [rangeStart, rangeEnd] 内按 stepMinutes 生成等步刻度时间列表（Dayjs）。
 *
 * @deprecated 仅用于不需要「头/尾 partial 格」的场景；时间轴渲染请用 {@link getAxisCells}。
 */
export declare function getTicks(rangeStart: Dayjs, rangeEnd: Dayjs, stepMinutes: number): Dayjs[];
/**
 * 时间轴上一格的描述：起始时间 + 跨度（分钟）。
 * - 中间格：跨度 = `stepMinutes`，起点对齐到 step 网格（如 15 分钟一格时落在 `:00/:15/:30/:45`）；
 * - head 格：当 `rangeStart` 不在网格上时存在，起点 = `rangeStart`，跨度 < step；
 * - tail 格：当 `rangeEnd` 不在网格上时存在，起点 = 最后一个对齐点，跨度 < step。
 */
export interface AxisCell {
    start: Dayjs;
    widthMinutes: number;
}
/**
 * 把 [`rangeStart`, `rangeEnd`] 切成「对齐到 step 网格」的格子序列：
 *
 * 1. 找到第一个 ≥ `rangeStart` 且分钟为 `stepMinutes` 整数倍的对齐点；
 * 2. 若对齐点严格大于 `rangeStart`，先放一格 head（`rangeStart` → 对齐点），跨度 < step；
 * 3. 中间按 step 步进，每格起点都落在网格上；
 * 4. 若 `rangeEnd` 落在两个对齐点之间，最后多出一格 tail（最后对齐点 → `rangeEnd`），跨度 < step。
 *
 * `rangeStart` / `rangeEnd` 都恰落在网格上时退化为完全等步格。
 */
export declare function getAxisCells(rangeStart: Dayjs, rangeEnd: Dayjs, stepMinutes: number): AxisCell[];
/**
 * 横向时间轴「格」数量，与 useTimeAxis 中 cells 算法一致。
 * 用于 cursor-moves 模式下计算压缩后的每格像素宽度。
 */
export declare function getHorizontalAxisSlotCount(range: TimeRangeOption | undefined, referenceDate: Dayjs, stepMinutes: number): number;
