import { ClipboardCopyConfig, IColumn, IColumnComponent, IRow } from '../../../../../../types/src/table';
import { default as Column } from '../../core/column/Column';
import { default as Module } from '../../core/Module';
import { default as RowComponent } from '../../core/row/RowComponent';
import { default as ExportRow } from './ExportRow';

type ColumnGroupData = {
    column: IColumn;
    depth: number;
    height?: number;
    subGroups?: ColumnGroupData[];
    title: string;
    width?: number;
};
type TableStyles = {
    calcRow?: HTMLElement | null;
    evenRow?: HTMLElement | null;
    firstCell?: HTMLElement | null;
    firstGroup?: HTMLElement | null;
    firstRow?: HTMLElement | null;
    lastCell?: HTMLElement | null;
    oddRow?: HTMLElement | null;
    styleCells?: HTMLCollectionOf<HTMLElement>;
    styleRowHeader?: HTMLElement | null;
};
type SetupConfig = {
    groupHeader?: ((value: any, count: number, data: any, component: RowComponent) => any) | Array<(value: any, count: number, data: any, component: RowComponent) => any> | false;
    rowFormatter?: ((row: RowComponent) => any) | null;
    treeElementField?: string;
};
type ColumnLookup = (this: any) => Column[];
type RowLookup = (this: any) => IRow[];
export default class Export extends Module {
    static readonly moduleName = "export";
    static readonly columnLookups: Record<string, ColumnLookup>;
    static readonly rowLookups: Record<string, RowLookup>;
    config: ClipboardCopyConfig;
    cloneTableStyle: boolean | undefined;
    colVisProp: string;
    colVisPropAttach: string;
    constructor(table: any);
    initialize(): void;
    generateExportList(config: ClipboardCopyConfig, style: boolean | undefined, range: string | ((this: any) => RowComponent[]), colVisProp: string): ExportRow[];
    generateTable(config: ClipboardCopyConfig, style: boolean, range: string | ((this: any) => RowComponent[]), colVisProp: string): HTMLTableElement;
    rowLookup(range: string | ((this: any) => RowComponent[])): IRow[];
    generateColumnGroupHeaders(columns?: IColumn[]): ColumnGroupData[];
    processColumnGroup(column: IColumn): ColumnGroupData | false;
    columnVisCheck(column: IColumn): boolean;
    headersToExportRows(columns: ColumnGroupData[]): ExportRow[];
    bodyToExportRows(rows: IRow[], columns?: IColumnComponent[]): ExportRow[];
    generateTableElement(list: ExportRow[]): HTMLTableElement;
    lookupTableStyles(): TableStyles;
    generateHeaderElement(row: ExportRow, _setup: SetupConfig, _styles: TableStyles): HTMLTableRowElement;
    generateGroupElement(row: ExportRow, setup: SetupConfig, styles: TableStyles): HTMLTableRowElement;
    generateCalcElement(row: ExportRow, setup: SetupConfig, styles: TableStyles): HTMLTableRowElement;
    generateRowElement(row: ExportRow, setup: SetupConfig, styles: TableStyles): HTMLTableRowElement;
    generateHTMLTable(list: ExportRow[]): string;
    getHtml(visible: string | ((this: any) => RowComponent[]), style: boolean, config: ClipboardCopyConfig | false | undefined, colVisProp?: string): string;
    mapElementStyles(from: HTMLElement | null | undefined, to: HTMLElement, props: string[]): void;
}
export {};
