import { TimeRangeOption } from "../types.js";
import { Dayjs } from "dayjs";

//#region src/components/pisellTimeNavigator/utils/index.d.ts
/** 日历时间轴默认步长（分钟），与历史「整点列」一致 */
declare const DEFAULT_CALENDAR_SLOT_STEP_MINUTES = 60;
/**
 * 按营业日 {@link TimeRangeOption} 在锚定自然日零点展开，生成日视图时间轴「列左边界」：
 * 值为相对 `reference.startOf('day')` 的**浮点小时**（可 ≥24，表示次日时刻），步长为 `slotStepMinutes`。
 */
declare function buildCalendarTimelineSlotStartsFromRange(range: TimeRangeOption | undefined, anchorDate: Date | Dayjs, slotStepMinutes?: number): number[];
/**
 * @deprecated 语义上等价于 {@link buildCalendarTimelineSlotStartsFromRange}(..., 60)；保留兼容导出。
 */
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 的次日同一时刻
 */
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')`，保持原有行为，不强行扭曲日期。
 */
declare function pickReferenceDateContainingNow(range: TimeRangeOption | undefined, now: Dayjs): Dayjs;
/**
 * 横向时间轴「格」数量，与 useTimeAxis 中 cells 算法一致。
 * 用于 cursor-moves 模式下计算压缩后的每格像素宽度。
 */
declare function getHorizontalAxisSlotCount(range: TimeRangeOption | undefined, referenceDate: Dayjs, stepMinutes: number): number;
//#endregion
export { DEFAULT_CALENDAR_SLOT_STEP_MINUTES, buildCalendarHourSlotsFromRange, buildCalendarTimelineSlotStartsFromRange, getHorizontalAxisSlotCount, getRangeBounds, pickReferenceDateContainingNow };