import type { GanttTask, GanttGroup, GanttRow, GanttDragState } from "./GanttChart.types";
export { toDate, addDays, isSameDay, isWeekend, getDaysBetween, getWeekNumber, } from "../../../utils/dateUtils";
/**
 * Day-offset of `date` from `rangeStart` (0-based).
 */
export declare function getDayOffset(date: Date | string, rangeStart: Date | string): number;
/**
 * Generate every date between rangeStart and rangeEnd (inclusive).
 */
export declare function generateDayColumns(rangeStart: Date, rangeEnd: Date): Date[];
/**
 * Group consecutive days into month spans.
 * Returns [{month: "Jan 2024", startIndex: 0, span: 31}, …]
 */
export interface MonthSpan {
    label: string;
    startIndex: number;
    span: number;
}
export declare function generateMonthSpans(days: Date[]): MonthSpan[];
/**
 * Auto-detect date range from task data with padding.
 */
export declare function autoDateRange(tasks: GanttTask[], paddingDays?: number): {
    start: Date;
    end: Date;
};
/**
 * Compute group summary: earliest start, latest end, completed count.
 */
export declare function computeGroupSummary(group: GanttGroup, tasks: GanttTask[]): {
    earliestStart: Date;
    latestEnd: Date;
    completedCount: number;
};
/**
 * Format a short day label (e.g. "15", "Mon 15").
 */
export declare function formatDayLabel(date: Date, zoom: "day" | "week" | "quarter" | "month" | "year"): string;
/**
 * Format duration as "X days".
 */
export declare function formatDuration(startDate: Date | string, endDate: Date | string): string;
/**
 * Format a date as "Jan 15" style short label.
 */
export declare function formatDateShort(date: Date | string): string;
export interface WeekSpan {
    label: string;
    startIndex: number;
    span: number;
}
/**
 * Group consecutive days into week spans with "W3" style labels.
 */
export declare function generateWeekSpans(days: Date[]): WeekSpan[];
export interface ArrowPath {
    id: string;
    d: string;
    isBackward: boolean;
}
/**
 * Calculate an SVG path string for a dependency arrow from one task bar to another.
 *
 * Two routing modes:
 * - Forward: target left >= source right + minGap → clean L-shaped path through midpoint
 * - Overlap/backward: bars overlap horizontally → route below both bars
 */
export declare function calculateDependencyPath(fromLeft: number, fromWidth: number, fromTop: number, fromHeight: number, toLeft: number, toTop: number, toHeight: number): {
    d: string;
    isBackward: boolean;
};
/**
 * Build all dependency arrow paths for visible tasks.
 */
export declare function buildDependencyArrows(tasks: GanttTask[], rows: GanttRow[], dayWidth: number, rowHeight: number, rangeStart: Date, activeDrag?: GanttDragState | null): ArrowPath[];
/**
 * Calculate expected progress (0-100) based on elapsed time.
 */
export declare function calculateExpectedProgress(startDate: Date | string, endDate: Date | string): number;
