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

/**
 * @private
 *
 * section view 하나에 배치되는 축들.
 */
declare class PaneAxes {
    row: number;
    col: number;
    _axes: Axis[];
    constructor(row: number, col: number);
    /**
     * section view에서 (left, top) -> (right, bottom) 순서대로 배치할 수 있게 배치한다.
     */
    sort(isX: boolean, inverted: boolean): void;
}
declare abstract class PaneAxisMatrix {
    chart: IChart;
    isX: boolean;
    protected _matrix: PaneAxes[][];
    constructor(chart: IChart, isX: boolean);
    rows(): number;
    cols(): number;
    _prepare(axes: AxisCollection, rows: number, cols: number, inverted: boolean): void;
    get(row: number, col: number): PaneAxes;
    getRow(row: number): PaneAxes[];
    getColumn(col: number): PaneAxes[];
    _buildTicks(lens: number[], phase: number): void;
    _calcPoints(lens: number[], phase: number): void;
    protected abstract _doPrepare(axes: AxisCollection, rows: number, cols: number): void;
}

declare class PaneBody extends Body<PaneBodyOptions> {
    pane: Pane;
    static defaults: PaneBodyOptions;
    constructor(pane: Pane);
    contains(obj: GaugeBase | Series): boolean;
}
declare class PaneLegend extends Legend {
    pane: Pane;
    constructor(pane: Pane);
    protected _doPrepareRender(chart: IChart): void;
    protected _getLegendSources(): ILegendSource[];
}
declare class Pane extends ChartItem<PaneOptions> {
    row: number;
    col: number;
    private _body;
    private _legend;
    constructor(chart: IChart, row: number, col: number);
    protected _doInit(op: PaneOptions): void;
    /**
     * Body 모델.
     */
    get body(): PaneBody;
    get legend(): PaneLegend;
    _prepareRender(): void;
}
interface IRelativeSize {
    size: number;
}
/**
 * 다중 분할 panes.<br/>
 * 각 pane에 해당하는 x, y축이 반드시 존재해야 한다.
 * axis는 {@link https://realchart.co.kr/config/config/base/axis#row row}, {@link https://realchart.co.kr/config/config/base/axis#col col} 속성으로 위치를 지정한다.
 * 시리즈는 {@link https://realchart.co.kr/config/config/base/series#row row}, {@link https://realchart.co.kr/config/config/base/series#col col} 속성으로 지정하거나, 아니면 axis 위치에 따라 자동으로 결정된다.
 * // 현재 문서 구조로 SeriesGroup을 가리킬 수 없음.
 * // 시리즈그룹은 {@link SeriesGroup.row row}, {@link 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 _colSizes;
    private _rowSizes;
    private _paneDic;
    _xAxes: PaneAxisMatrix;
    _yAxes: PaneAxisMatrix;
    private _panes;
    get count(): number;
    get rowCount(): number;
    get colCount(): number;
    get paneCount(): number;
    colSizes(): (number | IRelativeSize)[];
    rowSizes(): (number | IRelativeSize)[];
    getPane(row: number, col: number): Pane;
    getRow(row: number): Pane[];
    getColumn(col: number): Pane[];
    getAxisOf(annotation: Annotation, isX: boolean): IAxis;
    isValidAxis(axis: IAxis): boolean;
    protected _doLoadProp(prop: string, value: any): boolean;
    protected _doSetSimple(source: any): boolean;
    _load(source: any): ChartItem;
    protected _doPrepareRender(chart: IChart): void;
    _calcSizes(exts: (number | IRelativeSize)[], len: number): number[];
    getXLens(length: number): number[];
    getYLens(length: number): number[];
    measureAxes(width: number, height: number, inverted: boolean, phase: number): void;
    private $_calcAxesPoints;
    completeAxesPoints(xLens: number[], yLens: number[]): void;
    /**
     * @private
     * chart에서 호출됨.
     */
    getBodyAnnotation(name: string): Annotation;
    prepareRender(xAxes: AxisCollection, yAxes: AxisCollection): void;
    /**
     * number | (`${number}*` | '*')[] // '*'은 '1*'과 동일.
     */
    private $_parseSizes;
    private $_parsePanes;
    private $_loadPanes;
    /**
     * 축이 연결되지 않은 pane들은 skip한다.
     */
    private $_collectPanes;
}

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

export { Split, registerSplit as default };
