import GlobalModel from '../../model/Global.js';
import SeriesModel from '../../model/Series.js';
import ExtensionAPI from '../../core/ExtensionAPI.js';
import DataZoomModel from './DataZoomModel.js';
import { AxisBaseModel } from '../../coord/AxisBaseModel.js';
import type Eventful from 'tvrender/lib/core/Eventful.js';
import { DataZoomAxisDimension } from './helper.js';
interface MinMaxSpan {
    minSpan: number;
    maxSpan: number;
    minValueSpan: number;
    maxValueSpan: number;
}
interface IVisibleChangedParams {
    from: number;
    to: number;
    visibleFrom: number;
    visibleTo: number;
    fromTime: number;
    toTime: number;
    offsetRightDistance: number;
    offsetLeftDistance: number;
    lastBarRightSideDiffBarCount: number;
    barSpace: number;
}
/**
 * Operate single axis.
 * One axis can only operated by one axis operator.
 * Different dataZoomModels may be defined to operate the same axis.
 * (i.e. 'inside' data zoom and 'slider' data zoom components)
 * So dataZoomModels share one axisProxy in that case.
 */
declare class AxisProxy {
    ecModel: GlobalModel;
    private _dimName;
    private _axisIndex;
    private _valueWindow;
    private _percentWindow;
    private _dataExtent;
    private _rawDataExtent;
    private _minMaxSpan;
    private _dataZoomModel;
    private _lastVisibleChangeTime;
    constructor(dimName: DataZoomAxisDimension, axisIndex: number, dataZoomModel: DataZoomModel, ecModel: GlobalModel);
    /**
     * Whether the axisProxy is hosted by dataZoomModel.
     */
    hostedBy(dataZoomModel: DataZoomModel): boolean;
    /**
     * @return Value can only be NaN or finite value.
     */
    getDataValueWindow(): [number, number];
    getDimName(): DataZoomAxisDimension;
    /**
     * @return {Array.<number>}
     */
    getDataPercentWindow(): [number, number, number, number];
    setDataPercentWindow(percentWindow: [number, number, number?, number?]): void;
    getTargetSeriesModels(): SeriesModel<import("../../util/types").SeriesOption<unknown, import("../../util/types").DefaultStatesMixin>>[];
    getAxisModel(): AxisBaseModel;
    getMinMaxSpan(): MinMaxSpan;
    _throttleVisibleChanged(api: Eventful, params: IVisibleChangedParams): void;
    /**
     * Only calculate by given range and this._dataExtent, do not change anything.
     */
    calculateDataWindow(opt?: {
        start?: number;
        end?: number;
        startValue?: number | string | Date;
        endValue?: number | string | Date;
    }): {
        valueWindow: [number, number];
        percentWindow: [number, number, number, number];
    };
    /**
     * Notice: reset should not be called before series.restoreData() is called,
     * so it is recommended to be called in "process stage" but not "model init
     * stage".
     */
    reset(dataZoomModel: DataZoomModel, api: ExtensionAPI, isResize: boolean): void;
    filterData(dataZoomModel: DataZoomModel, api: ExtensionAPI): void;
    getRawDataExtent(): [number, number];
    private _updateMinMaxSpan;
    private _setAxisModel;
}
export default AxisProxy;
