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;