import { ReactNode } from 'react';
import { RowConfig, GhanttBarSegment, GhanttRowValue } from '../types/table';
export type { GhanttBarSegment, GhanttRowValue } from '../types/table';
/** Escala de la rejilla temporal (de más detalle a más agregada). */
export type GhanttTimelineScale = 'hour' | 'day' | 'week' | 'month' | 'year';
/**
 * Rango temporal visible y rejilla de la columna Gantt.
 */
export interface GhanttTimelineProps {
    viewStart: Date | string;
    viewEnd: Date | string;
    scale?: GhanttTimelineScale;
    /**
     * Solo con `scale: 'day'` (o por defecto). Si es `true` (por defecto), la rejilla abarca el **mes
     * calendario completo anterior** al de `viewStart` y hasta el **fin del mes** que contiene `viewEnd`,
     * de modo que p. ej. al centrar abril sigan existiendo todas las columnas de marzo a la izquierda
     * y se vean con **scroll horizontal solo dentro de la columna** Gantt (cabecera + filas sincronizadas).
     */
    includeLeadingFullMonth?: boolean;
    /**
     * Ancho mínimo en px **por slot** (día/semana/mes según `scale`). El contenido temporal puede ser
     * más ancho que la columna: el **scroll** es interno a la columna. Si se omite, en vista **`day`**
     * se usa **44**; en `week`/`month`/`hour`/`year` se aplican anchos por defecto del paquete o reparto flex.
     */
    columnWidthPx?: number;
    /**
     * Si es `true`, **Cmd** (macOS) o **Ctrl** + rueda hace **zoom dentro de la escala** (ancho de columna)
     * y solo al llegar al límite cambia la **vista** (hora → día → semana → mes; sin vista solo-año), sin recortar la
     * línea de tiempo global **2015-01-01** → **1 enero del año siguiente**; el puntero ancla el **scroll**.
     * En **hora** la cinta sigue siendo ventana local. Opcional {@link GhanttEventsProps.onTimelineChange}.
     */
    modifierWheelZoom?: boolean;
    /**
     * Ancho máximo en px de la **columna** Gantt si no defines `gantt.column.maxWidth`.
     * @default 560
     */
    columnMaxWidthPx?: number;
    /**
     * Inicio del rango global para zoom con modificador (sobrescribe 2015-01-01).
     */
    modifierZoomGlobalStart?: Date | string;
    /**
     * Fin del rango global para zoom con modificador (sobrescribe el fin del año próximo).
     */
    modifierZoomGlobalEnd?: Date | string;
}
export interface GhanttAppearanceProps {
    /** @default 44 */
    trackMinHeightPx?: number;
    trackClassName?: string;
}
export interface GhanttEventsProps<T = unknown> {
    onBarClick?: (payload: {
        row: RowConfig<T>;
        bar: GhanttBarSegment;
    }) => void;
    /** Notifica cambios de ventana/escala al usar zoom con modificador (p. ej. para persistir estado). */
    onTimelineChange?: (timeline: GhanttTimelineProps) => void;
}
export interface GhanttColumnPresentationProps {
    id?: string;
    header: ReactNode;
    width?: number | string;
    minWidth?: number;
    maxWidth?: number | 'auto';
    lockable?: boolean;
    locked?: boolean;
    placement?: 'start' | 'end';
    /**
     * Clases extra en `<th>` (se combinan con el borde izquierdo que separa esta columna de la anterior).
     */
    headerClassName?: string;
    /**
     * Clases extra en `<td>` del cuerpo (se combinan con el mismo borde izquierdo que en cabecera).
     */
    cellClassName?: string;
}
export interface GhanttDataProps<T = unknown> {
    /**
     * Campo de la fila (`keyof T`) o función. Con filas genéricas, la función es la forma más explícita.
     */
    accessor: keyof T | string | ((row: T) => GhanttRowValue | undefined);
}
/**
 * Configuración agrupada del organismo `Ghantt` (presentación, datos, tiempo, aspecto, eventos).
 */
export interface GhanttColumnDef<T = unknown> {
    column: GhanttColumnPresentationProps;
    data: GhanttDataProps<T>;
    timeline: GhanttTimelineProps;
    appearance?: GhanttAppearanceProps;
    events?: GhanttEventsProps<T>;
}
//# sourceMappingURL=types.d.ts.map