import { CSSProperties, ReactNode } from 'react';
import { GhanttTimelineSlot, GhanttUpperSegment } from './ganttTimeline';
/** A partir de este número de slots se usa una rejilla CSS (una sola capa) en lugar de un nodo por columna. */
export declare const GHANTT_DENSE_SLOT_GRID_MIN_SLOTS = 96;
/**
 * Con escala `hour` / `day` / `week` y al menos tantos slots, la **cabecera** (etiquetas por slot)
 * virtualiza celdas con {@link ghanttScrollVirtualIndexRange}. El **cuerpo** con ancho fijo usa una
 * sola capa CSS (gradiente) para todos los días/semanas; no duplica esa lógica por fila.
 */
export declare const GHANTT_SCROLL_VIRTUAL_MIN_SLOTS = 120;
/** @deprecated Usar {@link GHANTT_SCROLL_VIRTUAL_MIN_SLOTS}. */
export declare const GHANTT_HOUR_VIRTUAL_MIN_SLOTS = 120;
/**
 * Rango de índices de slots (misma anchura en px) a renderizar para scroll fluido:
 * ~200–300 slots “activos” anclados al scroll (viewport + colchón hacia ambos lados).
 */
export declare function ghanttScrollVirtualIndexRange(scrollLeftPx: number, viewportWidthPx: number, cellPx: number, slotCount: number): {
    start: number;
    end: number;
};
/** @deprecated Usar {@link ghanttScrollVirtualIndexRange}. */
export declare const ghanttHourVirtualIndexRange: typeof ghanttScrollVirtualIndexRange;
/** Tope usado por {@link ghanttDenseHeaderLabelIndices} (utilidades de muestreo; la cabecera del strip pinta un label por slot). */
export declare const GHANTT_DENSE_HEADER_MAX_LABELS = 72;
/**
 * Índices de slot en los que dibujar etiqueta en cabecera densa (inicio + cada ~step + último slot).
 */
export declare function ghanttDenseHeaderLabelIndices(slotCount: number, maxLabels: number): number[];
/**
 * Índices de etiquetas en cabecera densa repartidos **por cada bloque del piso superior** (p. ej. mes),
 * para que al hacer scroll siempre haya etiquetas secundarias en el viewport. Si `upperSpans` no
 * encaja con `totalSlots`, se usa {@link ghanttDenseHeaderLabelIndices} global.
 */
export declare function ghanttDenseHeaderLabelIndicesByUpperSpans(totalSlots: number, upperSpans: readonly number[], maxLabels: number): number[];
export interface GhanttSlotStripProps {
    slots: readonly GhanttTimelineSlot[];
    /** Segmentos mayores (meses, años) para dibujar la rejilla principal. Si se pasan, se ocultan las líneas de los slots individuales. */
    upperSegments?: readonly GhanttUpperSegment[];
    /** `header`: fondo de cabecera; `body`: transparente para heredar fila (selección, hijos, zebra). */
    variant: 'header' | 'body';
    /** Contenido por celda de slot (cabecera con etiquetas). En cuerpo suele omitirse. */
    renderSlot?: (slot: GhanttTimelineSlot) => ReactNode;
    className?: string;
    /** Ancho fijo por slot (px). Suele ir dentro de un contenedor con `overflow-x-auto` en la columna Gantt. */
    slotMinWidthPx?: number;
    /**
     * Umbral para rejilla densa **solo en cuerpo** (gradiente repetido). La cabecera siempre usa una celda por slot.
     * @default {@link GHANTT_DENSE_SLOT_GRID_MIN_SLOTS}
     */
    densePatternMinSlots?: number;
}
/** Ancho de celda en px alineado a píxeles enteros (cabecera, cuerpo y gradiente comparten el mismo valor). */
export declare function ghanttSnapSlotWidthPx(slotMinWidthPx: number): number;
/**
 * Líneas verticales entre slots o segmentos mayores.
 * `slotPixelWidth` suele ser {@link ghanttSnapSlotWidthPx}(`columnWidthPx`).
 */
export declare function ghanttVerticalSlotGridBackgroundStyle(slotCount: number, slotPixelWidth: number, upperSegments?: readonly GhanttUpperSegment[], hideMinorGrid?: boolean): CSSProperties;
declare function GhanttSlotStripRoot(props: GhanttSlotStripProps): import("react/jsx-runtime").JSX.Element;
export declare const GhanttSlotStrip: import('react').MemoExoticComponent<typeof GhanttSlotStripRoot>;
export {};
//# sourceMappingURL=GhanttSlotStrip.d.ts.map