import * as RealChart from 'realchart';
import { IChart, AxisCollection, Axis, ChartItem, SplitOptions, ISplit, Annotation, PaneOptions, ChartItemOptions, Body, PaneBodyOptions, GaugeBase, Series } from 'realchart';

declare class PaneAxes {
    _axes: Axis[];
}
declare abstract class PaneAxisMatrix {
    chart: IChart;
    isX: boolean;
    protected _matrix: PaneAxes[][];
    constructor(chart: IChart, isX: boolean);
    rows(): number;
    cols(): number;
    abstract _prepare(axes: AxisCollection, rows: number, cols: number): void;
    get(row: number, col: number): PaneAxes;
    getRow(row: number): PaneAxes[];
    getColumn(col: number): PaneAxes[];
    _buildTicks(lens: number[]): void;
    _calcPoints(lens: number[], phase: number): void;
}

declare class PaneBody extends Body<PaneBodyOptions> {
    pane: Pane;
    static defaults: PaneBodyOptions;
    constructor(pane: Pane);
    base(): Body;
    contains(obj: GaugeBase | Series): boolean;
}
declare class Pane extends ChartItem<PaneOptions> {
    row: number;
    col: number;
    private _body;
    constructor(chart: IChart, row: number, col: number);
    protected _doInitChildren(op: {
        [child: string]: ChartItemOptions;
    }): void;
    /**
     * Body 모델.
     */
    get body(): PaneBody;
    /**
     */
    width: number;
    /**
     */
    height: number;
    /**
     */
    inverted: boolean;
    _prepareRender(): void;
}
/**
 * 다중 분할 panes.<br/>
 * 각 pane에 해당하는 x, y축이 반드시 존재해야 한다.
 * axis는 {@page config.base.axis#row row}, {@page config.base.axis#col col} 속성으로 위치를 지정한다.
 * 시리즈는 {@page config.base.series#row row}, {@page config.base.series#col col} 속성으로 지정하거나, 아니면 axis 위치에 따라 자동으로 결정된다.
 * // 현재 문서 구조로 SeriesGroup을 가리킬 수 없음.
 * // 시리즈그룹은 {@page SeriesGroup.row row}, {@page SeriesGroup.col col} 속성으로 지정하거나, 아니면 axis 위치에 따라 자동으로 결정된다.
 *
 * @modules split
 */
declare class Split extends ChartItem<SplitOptions> implements ISplit {
    static defaults: SplitOptions;
    constructor(chart: IChart);
    private _cols;
    private _rows;
    private _widths;
    private _heights;
    private _panes;
    _xAxes: PaneAxisMatrix;
    _yAxes: PaneAxisMatrix;
    _vcols: number;
    _vrows: number;
    private _vwidths;
    private _vheights;
    private _vpanes;
    count(): number;
    rowCount(): number;
    colCount(): number;
    paneCount(): number;
    getPane(row: number, col: number): Pane;
    getRow(row: number): Pane[];
    getColumn(col: number): Pane[];
    protected _doLoadProp(prop: string, value: any): boolean;
    protected _doSetSimple(source: any): boolean;
    _load(source: any): ChartItem;
    protected _doPrepareRender(chart: IChart): void;
    getXLens(length: number): number[];
    getYLens(length: number): number[];
    layoutAxes(width: number, height: number, inverted: boolean, phase: number): void;
    private $_calcAxesPoints;
    calcAxesPoints(xLens: number[], yLens: number[]): void;
    /**
     * body들의 표시 크기를 계산한다.
     */
    calcSizes(width: number, height: number): void;
    getAnnotation(name: string): Annotation;
    prepareRender(xAxes: AxisCollection, yAxes: AxisCollection): void;
    /**
     * number | (`${number}*` | '*')[] // '*'은 '1*'과 동일.
     */
    private $_parseSizes;
    private $_parsePanes;
    private $_loadPanes;
    /**
     * 축이 연결되지 않은 pane들은 skip한다.
     */
    private $_collectPanes;
    private $_calcSizes;
}

declare function registerSplit(chart: typeof RealChart): void;

export { Split, registerSplit as default };
