import { DataTable, DataRow } from '../types/data-structures';
import { GanttViewMode } from '../functional-components/gantt/types/gantt-types';
import { CSSProperties } from 'react';
/**
 * Filters WBS items based on a search text.
 * Keeps tasks that match the filter, or whose children match the filter.
 *
 * @param items - List of normalized WBS items.
 * @param filterText - The text to filter by.
 * @returns The filtered list of items.
 */
export declare function filterWBSItems(items: WBSNormalizedItem[], filterText: string): WBSNormalizedItem[];
/**
 * Type alias for Smeup DataTable structure.
 */
export type WBSSmeupDataTable = DataTable;
/**
 * Common column mapping for WBS-like components.
 */
export interface WBSColumnMapping {
    id: string;
    labelColumnsTask: string[];
    labelColumnsPhase: string[];
    taskStartDate: string;
    taskEndDate: string;
    taskStartTime?: string;
    taskEndTime?: string;
    phaseStartDate: string;
    phaseEndDate: string;
    phaseStartTime?: string;
    phaseEndTime?: string;
    phaseIdColumn?: string;
    colorColumn?: string;
    styleColumn?: string;
}
/**
 * Standardized data format used by WBS components.
 */
export interface WBSNormalizedItem {
    id: string;
    labels: string[];
    type: "task" | "phase" | "marker";
    startDate: string;
    endDate: string;
    data: DataRow;
    parentId?: string;
    color?: string;
    customStyle?: CSSProperties;
}
export declare const WBS_CONSTANTS: {
    ROW_HEIGHT: number;
};
export declare const VIEW_MODE_OPTIONS: ({
    obj: {
        k: "hour";
        t: string;
        p: string;
    };
    decode: string;
} | {
    obj: {
        k: "day";
        t: string;
        p: string;
    };
    decode: string;
} | {
    obj: {
        k: "week";
        t: string;
        p: string;
    };
    decode: string;
} | {
    obj: {
        k: "month";
        t: string;
        p: string;
    };
    decode: string;
} | {
    obj: {
        k: "year";
        t: string;
        p: string;
    };
    decode: string;
})[];
/**
 * Result of the normalization process including validation status.
 */
export interface WBSNormalizationResult {
    items: WBSNormalizedItem[];
    hasValidationErrors: boolean;
}
/**
 * Normalizes input DataTables into a flat list of items (tasks, phases, markers).
 * It organizes the list such that phases immediately follow their parent tasks.
 *
 * @param tasks - DataTable containing task rows.
 * @param mapping - Optional column mapping configuration.
 * @param phases - Optional Record of DataTables containing phase rows associated with tasks, keyed by taskId.
 * @returns A result object containing the flat array of normalized items and a validation flag.
 */
export declare function normalizeWBSData(tasks: WBSSmeupDataTable, mapping: WBSColumnMapping): WBSNormalizationResult;
export declare function normalizePhasesData(phases: Record<string, WBSSmeupDataTable>, taskId: string, mapping: WBSColumnMapping): WBSNormalizationResult;
/**
 * Calculates the full date range for a list of WBS items.
 *
 * @param items - List of normalized WBS items.
 * @returns An object containing the start and end Date objects.
 */
export declare function getWBSRange(items: WBSNormalizedItem[], viewMode: GanttViewMode): {
    start: Date;
    end: Date;
};
/**
 * Utility to add units to a date based on the WBS view mode.
 * Adds a specific number of time units (hours, days, weeks, months, years) to a date.
 *
 * @param date - The starting date.
 * @param units - The number of units to add.
 * @param viewMode - The time unit to add, based on the WBS view mode.
 * @returns A new Date object with the added units.
 */
export declare function addWBSUnitsToDate(date: Date, units: number, viewMode: GanttViewMode): Date;
/**
 * Calculates the absolute fractional month position for a date.
 * (Year * 12 + Month + Day/DaysInMonth)
 *
 * @param date - The date to calculate.
 * @returns The absolute month position.
 */
export declare function getAbsMonthPos(date: Date): number;
/**
 * Calculates the absolute fractional year position for a date.
 * (Year + DayOfYear/DaysInYear)
 *
 * @param date - The date to calculate.
 * @returns The absolute year position.
 */
export declare function getAbsYearPos(date: Date): number;
//# sourceMappingURL=wbs-utils.d.ts.map