export interface SlotConfig {
    slotsPerTime: number;
    gapMinutes: number;
    dayStartMin: number;
    lastStartMin: number;
    stepMin: number;
    lunch: {
        fromMin: number;
        toMin: number;
    };
    maxPerDay: number;
}
export declare const DEFAULT_SLOT_CONFIG: SlotConfig;
export type SlotReason = 'Closed' | 'Day full' | 'Fully booked' | 'Too close to another audit' | 'Time passed' | 'Outside booking window';
export declare function toMinutes(t: string | null | undefined): number | null;
export declare function toHHMM(min: number): string;
export declare function toLabel(min: number): string;
export declare function buildStartTimes(cfg?: SlotConfig): number[];
export declare function isValidStartTime(min: number | null, cfg?: SlotConfig): boolean;
export declare function freeSeatsAt(booked: number[], t: number, cfg?: SlotConfig): number;
export interface SlotCell {
    time: string;
    label: string;
    total: number;
    free: number;
    status: 'open' | 'limited' | 'closed';
    reason?: SlotReason;
}
export interface SessionBlock {
    key: 'morning' | 'evening';
    label: string;
    from: string;
    to: string;
    slots: SlotCell[];
}
export interface BuildGridInput {
    booked: number[];
    dayCount: number;
    dateClosed: boolean;
    outsideWindow: boolean;
    notBeforeMin: number | null;
    cfg?: SlotConfig;
}
export declare function buildSlotGrid(input: BuildGridInput): SessionBlock[];
export declare function nearestOpen(sessions: SessionBlock[], t: string, n?: number): string[];
