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 { onBarClick?: (payload: { row: RowConfig; 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 `` (se combinan con el borde izquierdo que separa esta columna de la anterior). */ headerClassName?: string; /** * Clases extra en `` del cuerpo (se combinan con el mismo borde izquierdo que en cabecera). */ cellClassName?: string; } export interface GhanttDataProps { /** * 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 { column: GhanttColumnPresentationProps; data: GhanttDataProps; timeline: GhanttTimelineProps; appearance?: GhanttAppearanceProps; events?: GhanttEventsProps; } //# sourceMappingURL=types.d.ts.map