import { GhanttTimelineProps, GhanttTimelineScale } from './types';
/** Inicio del rango global al hacer zoom con modificador (Cmd/Ctrl + rueda). */
export declare const GHANTT_MODIFIER_ZOOM_GLOBAL_START = "2015-01-01";
/**
 * Mitad de la ventana en escala `hour` (zoom por modificador / línea local): total ≈ 2× ms.
 * Antes 24 h por lado (48 h); se sube a **100 h** por lado (**200 h** mínimo en cinta) para scroll + virtualización.
 */
export declare const GHANTT_MODIFIER_ZOOM_HOUR_HALF_MS: number;
/** Fin exclusivo del rango global: hasta el fin de 2030. */
export declare function ghanttModifierZoomGlobalEndExclusive(): string;
/**
 * Orden de escala con zoom por modificador: de más detalle (índice 0) a más agregada (índice 3).
 * No incluye `year` (solo años en la rejilla): el tope es `month` (mes + año en cada etiqueta).
 */
export declare const GHANTT_MODIFIER_ZOOM_ORDER: readonly GhanttTimelineScale[];
/** Zoom mínimo de ventana (ms) — solo aplica a ventanas locales (p. ej. hora). */
export declare const GHANTT_MODIFIER_ZOOM_MIN_SPAN_MS = 3600000;
/** Anchos por slot recomendados (px). */
export declare function ghanttDefaultColumnWidthForScale(scale: GhanttTimelineScale): number;
export declare function ghanttModifierZoomScaleIndex(scale: GhanttTimelineScale): number;
/**
 * Escala según la **duración** visible (ms), con histéresis ligera (p. ej. API sin zoom por modificador).
 */
export declare function ghanttInferScaleForSpan(spanMs: number, prev?: GhanttTimelineScale): GhanttTimelineScale;
/**
 * Construye `viewStart` / `viewEnd` centrados en `centerMs` y acotados al rango global (API genérica).
 * Para la línea completa con zoom por modificador usar {@link ghanttModifierZoomFullTimelineBounds}.
 */
export declare function ghanttModifierZoomWindowForScale(scale: GhanttTimelineScale, centerMs: number, globalStartMs: number, globalEndExclusiveMs: number): {
    viewStart: string;
    viewEnd: string;
};
/**
 * Ventana de timeline con **zoom por modificador**: casi siempre el rango global completo (2015 → fin
 * del año en curso) para que todos los años/períodos sigan presentes en la cinta; solo la **escala**
 * (rejilla) cambia. En **hora** se usa una ventana local centrada en `anchorMs` (no cabe la línea
 * entera a nivel hora en DOM). La ventana horaria total ≈ `2 * GHANTT_MODIFIER_ZOOM_HOUR_HALF_MS` (≥200 h).
 */
export declare function ghanttModifierZoomFullTimelineBounds(scale: GhanttTimelineScale, anchorMs: number, prev?: GhanttTimelineProps): {
    viewStart: string;
    viewEnd: string;
};
/** Normaliza la línea de tiempo inicial cuando está activo `modifierWheelZoom`. */
export declare function ghanttModifierZoomNormalizeInitial(t: GhanttTimelineProps): GhanttTimelineProps;
export interface GhanttModifierZoomWheelInput {
    /** Índice 0..3 en {@link GHANTT_MODIFIER_ZOOM_ORDER} (lo acumula `Ghantt` con la rueda). */
    targetScaleIndex: number;
    ctrlKey: boolean;
    metaKey: boolean;
    altKey: boolean;
    /** Fracción 0..1 sobre el contenido scrollable (instante bajo el puntero). */
    anchorFraction: number;
}
/** Límites de ancho de columna (px) para “zoom” dentro de la misma escala antes de cambiar de vista. */
export declare function ghanttModifierZoomColumnBounds(scale: GhanttTimelineScale): {
    min: number;
    max: number;
    defaultWidth: number;
};
/**
 * Calcula el columnWidthPx inicial de nextScale que preserva la misma densidad px/ms
 * que tenia currentWidthPx en currentScale. Forzado dentro de [min,max] de la escala destino.
 */
export declare function ghanttContinuousColumnWidth(currentScale: GhanttTimelineScale, currentWidthPx: number, nextScale: GhanttTimelineScale): number;
export interface GhanttModifierZoomWheelDeltaInput {
    /** Acumulado del batch (`>0` ≈ scroll “abajo” = zoom out / menos detalle). */
    deltaY: number;
    ctrlKey: boolean;
    metaKey: boolean;
    altKey: boolean;
    /** Fracción 0..1 del instante bajo el puntero (scroll tras zoom sigue usándola en `Ghantt`). */
    anchorFraction: number;
}
/**
 * Zoom con modificador vía rueda: primero **estrecha o ensancha columnas** en la escala actual;
 * solo al llegar al límite pasa al **siguiente nivel** de escala (p. ej. día → hora al acercar).
 */
export declare function ghanttModifierZoomWheelDelta(prev: GhanttTimelineProps, input: GhanttModifierZoomWheelDeltaInput): GhanttTimelineProps | null;
/**
 * Zoom por modificador: solo cambia la **escala** y mantiene la **cinta completa** (2015 → año actual)
 * salvo en vista **hora** (ventana local). El desplazamiento horizontal sigue el “enfoque” bajo el cursor.
 */
export declare function ghanttModifierZoomOnWheel(prev: GhanttTimelineProps, input: GhanttModifierZoomWheelInput): GhanttTimelineProps | null;
export interface GhanttModifierZoomApplyStepOptions {
    direction: 'in' | 'out';
    anchorFraction?: number;
}
/**
 * Un paso **discreto** de escala (API opcional / pruebas).
 */
export declare function ghanttModifierZoomApplyStep(prev: GhanttTimelineProps, options: GhanttModifierZoomApplyStepOptions): GhanttTimelineProps | null;
//# sourceMappingURL=ghanttModifierWheelZoom.d.ts.map