import * as matrix from 'tvrender/lib/core/matrix.js';
import ParallelAxis from './ParallelAxis.js';
import * as graphic from '../../util/graphic.js';
import ParallelModel from './ParallelModel.js';
import GlobalModel from '../../model/Global.js';
import ExtensionAPI from '../../core/ExtensionAPI.js';
import { DimensionName, ScaleDataValue } from '../../util/types.js';
import { CoordinateSystem, CoordinateSystemMaster } from '../CoordinateSystem.js';
import { ParallelActiveState } from './AxisModel.js';
import SeriesData from '../../data/SeriesData.js';
export interface ParallelAxisLayoutInfo {
    position: number[];
    rotation: number;
    transform: matrix.MatrixArray;
    axisNameAvailableWidth: number;
    axisLabelShow: boolean;
    nameTruncateMaxWidth: number;
    tickDirection: -1 | 1;
    labelDirection: -1 | 1;
}
declare type SlidedAxisExpandBehavior = 'none' | 'slide' | 'jump';
declare class Parallel implements CoordinateSystemMaster, CoordinateSystem {
    readonly type = "parallel";
    /**
     * key: dimension
     */
    private _axesMap;
    /**
     * key: dimension
     * value: {position: [], rotation, }
     */
    private _axesLayout;
    /**
     * Always follow axis order.
     */
    readonly dimensions: ParallelModel['dimensions'];
    private _rect;
    private _model;
    name: string;
    model: ParallelModel;
    constructor(parallelModel: ParallelModel, ecModel: GlobalModel, api: ExtensionAPI);
    private _init;
    /**
     * Update axis scale after data processed
     */
    update(ecModel: GlobalModel, api: ExtensionAPI): void;
    containPoint(point: number[]): boolean;
    getModel(): ParallelModel;
    /**
     * Update properties from series
     */
    private _updateAxesFromSeries;
    /**
     * Resize the parallel coordinate system.
     */
    resize(parallelModel: ParallelModel, api: ExtensionAPI): void;
    getRect(): graphic.BoundingRect;
    private _makeLayoutInfo;
    private _layoutAxes;
    /**
     * Get axis by dim.
     */
    getAxis(dim: DimensionName): ParallelAxis;
    /**
     * Convert a dim value of a single item of series data to Point.
     */
    dataToPoint(value: ScaleDataValue, dim: DimensionName): number[];
    /**
     * Travel data for one time, get activeState of each data item.
     * @param start the start dataIndex that travel from.
     * @param end the next dataIndex of the last dataIndex will be travel.
     */
    eachActiveState(data: SeriesData, callback: (activeState: ParallelActiveState, dataIndex: number) => void, start?: number, end?: number): void;
    /**
     * Whether has any activeSet.
     */
    hasAxisBrushed(): boolean;
    /**
     * Convert coords of each axis to Point.
     *  Return point. For example: [10, 20]
     */
    axisCoordToPoint(coord: number, dim: DimensionName): number[];
    /**
     * Get axis layout.
     */
    getAxisLayout(dim: DimensionName): ParallelAxisLayoutInfo;
    /**
     * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.
     */
    getSlidedAxisExpandWindow(point: number[]): {
        axisExpandWindow: number[];
        behavior: SlidedAxisExpandBehavior;
    };
}
export default Parallel;
