import { Task } from '../models/classes/Task';
/**
 * 检测两个任务是否存在时间交集
 * 注意：endDate包含当天，所以 task1(2025-01-28~2025-01-29) 和 task2(2025-01-29~2025-01-30)
 * 在 2025-01-29 这天是重叠的，应该换行显示
 * @param timeScale 当前时间刻度，小时视图('hour')下使用15分钟精度判断
 */
export declare function hasTimeOverlap(task1: Task, task2: Task, timeScale?: string): boolean;
/**
 * 为任务列表分配行索引，并计算每行高度
 * 使用贪心算法：尽可能将任务放在第一个不冲突的行
 * @param tasks 任务列表
 * @param resourceId 资源ID（用于获取占比）
 * @param baseRowHeight 基础行高（默认51）
 * @param enableLaneStacking 是否启用车道堆叠（默认 true）
 *   true  → 贪心打包：时间不冲突的任务共享同一行（节省空间）
 *   false → 独立行：每个任务独占一行，按 startDate 排序后依次分配行号
 * @returns { taskRowMap, rowHeights, totalHeight }
 */
export declare function assignTaskRows(tasks: Task[], baseRowHeight?: number, timeScale?: string, enableLaneStacking?: boolean): {
    taskRowMap: Map<string | number, number>;
    rowHeights: number[];
    totalHeight: number;
};
/**
 * 计算任务列表需要的最大行数
 */
export declare function calculateMaxRows(tasks: Task[]): number;
/**
 * 为资源视图的每个资源计算任务行布局
 * @returns 资源ID到其任务行映射的映射 { resourceId: { taskRowMap, rowHeights, totalHeight } }
 */
export declare function calculateResourceTaskLayout(tasks: Task[], currentResourceId?: string | number, baseRowHeight?: number): Map<string | number, {
    taskRowMap: Map<string | number, number>;
    rowHeights: number[];
    totalHeight: number;
}>;
