import m from "mithril";
import { Vnode } from './Widget';
import { Widget } from './Widget';
import { WidgetAttrs } from './Widget';
export interface PivotAttrs extends WidgetAttrs {
    pivotName?: string;
    pivotHeader?: PivotHeader;
    table: {
        header: string[];
        data: any[][];
    };
    columns: ColumnSpec[];
    by: string[];
}
export interface ColumnSpec {
    [tableValueCol: string]: string | ColumnGenerator;
}
export interface ColumnGenerator {
    (aggregators: {
        [name: string]: Aggregator;
    }, value: number | string, col?: number, rowData?: Array<number | string>): void;
}
export declare type Aggregator = number | {
    [name: string]: number;
};
export declare type PivotHeader = Array<string | {
    [oldkey: string]: string;
}>;
interface PivotStruct {
    name: string;
    values: Values;
    tree: PivotStruct[];
}
declare type HeaderMap = string[];
interface Values {
    cols: {
        [colVal: string]: Aggregator;
    };
    rows: {
        [rowName: string]: Values;
    };
}
export declare class Pivot extends Widget {
    id: number;
    oldHeaders: HeaderMap;
    newHeaders: m.ChildArray;
    pivot: PivotStruct;
    oninit(node: Vnode<PivotAttrs, this>): void;
    view(node: Vnode<PivotAttrs, this>): m.Vnode<any, any>;
}
export {};
