import type { Axis } from "./axes/Axis";
import type { XYCursor } from "./XYCursor";
import type { AxisRenderer } from "./axes/AxisRenderer";
import type { IDisposer } from "../../core/util/Disposer";
import type { XYSeries } from "./series/XYSeries";
import type { IPointerEvent } from "../../core/render/backend/Renderer";
import type { Scrollbar } from "../../core/render/Scrollbar";
import type { IPoint } from "../../core/util/IPoint";
import type { ISpritePointerEvent } from "../../core/render/Sprite";
import { Container } from "../../core/render/Container";
import { SerialChart, ISerialChartPrivate, ISerialChartSettings, ISerialChartEvents } from "../../core/render/SerialChart";
import { ListAutoDispose } from "../../core/util/List";
import { Button } from "../../core/render/Button";
import type { Animation } from "../../core/util/Entity";
export interface IXYChartSettings extends ISerialChartSettings {
    /**
     * horizontal scrollbar.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/} for more info
     */
    scrollbarX?: Scrollbar;
    /**
     * Vertical scrollbar.
     *
     */
    scrollbarY?: Scrollbar;
    /**
     * If this is set to `true`, users will be able to pan the chart horizontally
     * by dragging plot area.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Panning} for more info
     */
    panX?: boolean;
    /**
     * If this is set to `true`, users will be able to pan the chart vertically
     * by dragging plot area.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Panning} for more info
     */
    panY?: boolean;
    /**
     * Indicates what happens when mouse wheel is spinned horizontally while over
     * plot area.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Mouse_wheel_behavior} for more info
     */
    wheelX?: "zoomX" | "zoomY" | "zoomXY" | "panX" | "panY" | "panXY" | "none";
    /**
     * Indicates what happens when mouse wheel is spinned vertically while over
     * plot area.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Mouse_wheel_behavior} for more info
     */
    wheelY?: "zoomX" | "zoomY" | "zoomXY" | "panX" | "panY" | "panXY" | "none";
    /**
     * Indicates the relative "speed" of the mouse wheel.
     *
     * @default 0.25
     */
    wheelStep?: number;
    /**
     * Chart's cursor.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/} for more info
     */
    cursor?: XYCursor;
    /**
     * If not set (default), cursor will show tooltips for all data items in the
     * same category/date.
     *
     * If set, cursor will select closest data item to pointer (mouse or touch) and
     * show tooltip for it.
     *
     * It will also show tooltips for all data items that are within X pixels
     * range (as set in `maxTooltipDistance`).
     *
     * Tooltips for data items farther then X pixels, will not be shown.
     *
     * NOTE: set it to `-1` to ensure only one tooltip is displayed, even if there
     * are multiple data items in the same place.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/#tooltips} for more info
     */
    maxTooltipDistance?: number;
    /**
     * Indicates how the distance should be measured when assessing distance
     * between tooltips as set in `maxTooltipDistance`.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/#tooltips} for more info
     * @since 5.2.6
     */
    maxTooltipDistanceBy?: "xy" | "x" | "y";
    /**
     * If set to `false` the chart will not check for overlapping of multiple
     * tooltips, and will not arrange them to not overlap.
     *
     * Will work only if chart has an `XYCursor` enabled.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/#ooltips} for more info
     * @default true
     */
    arrangeTooltips?: boolean;
    /**
     * If set to `true`, using pinch gesture on the chart's plot area will zoom
     * chart horizontally.
     *
     * NOTE: this setting is not supported in a [[RadarChart]].
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Pinch_zoom} for more info
     * @since 5.1.8
     * @default false
     */
    pinchZoomX?: boolean;
    /**
     * If set to `true`, using pinch gesture on the chart's plot area will zoom
     * chart vertically.
     *
     * NOTE: this setting is not supported in a [[RadarChart]].
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Pinch_zoom} for more info
     * @since 5.1.8
     * @default false
     */
    pinchZoomY?: boolean;
    /**
     * If set, will use this relative position as a "center" for mouse wheel
     * horizontal zooming instead of actual cursor position.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Mouse_wheel_behavior} for more info
     * @since 5.2.11
     */
    wheelZoomPositionX?: number;
    /**
     * If set, will use this relative position as a "center" for mouse wheel
     * vertical zooming instead of actual cursor position.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Mouse_wheel_behavior} for more info
     * @since 5.2.11
     */
    wheelZoomPositionY?: number;
}
export interface IXYChartPrivate extends ISerialChartPrivate {
    /**
     * A list of [[Series]] that currently have their tooltip being displayed.
     */
    tooltipSeries?: Array<XYSeries>;
    /**
     * Array of other [[XYChart]] objects that cursors should be synced with.
     *
     * Note: cursors will be synced across the vertically stacked charts only.
     */
    otherCharts?: Array<XYChart>;
}
export interface IXYChartEvents extends ISerialChartEvents {
    /**
     * Invoked when panning starts.
     *
     * @since 5.0.4
     */
    panstarted: {
        originalEvent: IPointerEvent;
    };
    /**
     * Invoked when panning ends.
     *
     * @since 5.0.4
     */
    panended: {
        originalEvent: IPointerEvent;
    };
    /**
     * Invoked if pointer is pressed down on a chart and released without moving.
     *
     * `panended` event will still kick in after that.
     *
     * @since 5.2.19
     */
    pancancelled: {
        originalEvent: IPointerEvent;
    };
    /**
     * Invoked when wheel caused zoom ends.
     *
     * @since 5.0.4
     */
    wheelended: {};
}
/**
 * Creates an XY chart.
 *
 * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/} for more info
 * @important
 */
export declare class XYChart extends SerialChart {
    static className: string;
    static classNames: Array<string>;
    _settings: IXYChartSettings;
    _privateSettings: IXYChartPrivate;
    _seriesType: XYSeries;
    _events: IXYChartEvents;
    /**
     * A list of horizontal axes.
     */
    readonly xAxes: ListAutoDispose<Axis<AxisRenderer>>;
    /**
     * A list of vertical axes.
     */
    readonly yAxes: ListAutoDispose<Axis<AxisRenderer>>;
    /**
     * A [[Container]] located on top of the chart, used to store top horizontal
     * axes.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly topAxesContainer: Container;
    /**
     * A [[Container]] located in the middle the chart, used to store vertical axes
     * and plot area container.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly yAxesAndPlotContainer: Container;
    /**
     * A [[Container]] located on bottom of the chart, used to store bottom
     * horizontal axes.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly bottomAxesContainer: Container;
    /**
     * A [[Container]] located on left of the chart, used to store left-hand
     * vertical axes.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly leftAxesContainer: Container;
    /**
     * A [[Container]] located in the middle of the chart, used to store plotContainer and topPlotContainer
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly plotsContainer: Container;
    /**
     * A [[Container]] located in the middle of the chart, used to store actual
     * plots (series).
     *
     * NOTE: `plotContainer` will automatically have its `background` preset. If
     * you need to modify background or outline for chart's plot area, you can
     * use `plotContainer.get("background")` for that.*
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly plotContainer: Container;
    /**
     * A [[Container]] used for any elements that need to be displayed over
     * regular `plotContainer`.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly topPlotContainer: Container;
    /**
     * A [[Container]] axis grid elements are stored in.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly gridContainer: Container;
    /**
     * A [[Container]] axis background grid elements are stored in.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly topGridContainer: Container;
    /**
     * A [[Container]] located on right of the chart, used to store right-hand
     * vertical axes.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/xy-chart-containers/} for more info
     * @default Container.new()
     */
    readonly rightAxesContainer: Container;
    /**
     * A [[Container]] axis headers are stored in.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-headers/} for more info
     * @default Container.new()
     */
    readonly axisHeadersContainer: Container;
    /**
     * A button that is shown when chart is not fully zoomed out.
     *
     * @see {@link https://www.amcharts.com/docs/v5/charts/xy-chart/zoom-and-pan/#Zoom_out_button} for more info
     * @default Button.new()
     */
    readonly zoomOutButton: Button;
    _movePoint: IPoint;
    protected _wheelDp: IDisposer | undefined;
    _otherCharts?: Array<XYChart>;
    protected _movePoints: {
        [index: number]: IPoint;
    };
    protected _downStartX?: number;
    protected _downEndX?: number;
    protected _downStartY?: number;
    protected _downEndY?: number;
    protected _afterNew(): void;
    _beforeChanged(): void;
    protected _setUpTouch(): void;
    protected _maskGrid(): void;
    protected _removeSeries(series: this["_seriesType"]): void;
    /**
     * This method is invoked when mouse wheel is used over chart's plot
     * container, and handles zooming/pan.
     *
     * You can invoke this method manually, if you need to mimic chart's wheel
     * behavior over other elements of the chart.
     */
    handleWheel(event: {
        originalEvent: WheelEvent;
        point: IPoint;
        target: Container;
    }): void;
    protected _handleSetWheel(): void;
    protected _getWheelSign(axis: Axis<AxisRenderer>): number;
    protected _fixWheel(start: number, end: number): [number, number];
    protected _handlePlotDown(event: ISpritePointerEvent): void;
    protected _handleWheelAnimation(animation?: Animation<any>): void;
    protected _dispatchWheelAnimation(): void;
    protected _handlePlotUp(event: ISpritePointerEvent): void;
    protected _handlePlotMove(event: ISpritePointerEvent): void;
    protected _handlePinch(): void;
    _handleCursorPosition(): void;
    _updateCursor(): void;
    protected _addCursor(cursor: XYCursor): void;
    _prepareChildren(): void;
    protected _processSeries(series: this["_seriesType"]): void;
    protected _colorize(series: this["_seriesType"]): void;
    protected _handleCursorSelectEnd(): void;
    protected _handleScrollbar(axes: ListAutoDispose<Axis<any>>, start: number, end: number, priority?: "start" | "end"): void;
    protected _processAxis<R extends AxisRenderer>(axes: ListAutoDispose<Axis<R>>, container: Container): IDisposer;
    protected _removeAxis(axis: Axis<AxisRenderer>): void;
    _updateChartLayout(): void;
    /**
     * @ignore
     */
    processAxis(axis: Axis<AxisRenderer>): void;
    _handleAxisSelection(axis: Axis<any>, force?: boolean): void;
    protected _handleZoomOut(): void;
    /**
     * Checks if point is within plot area.
     *
     * @param   point  Reference point
     * @return         Is within plot area?
     */
    inPlot(point: IPoint): boolean;
    /**
     * @ignore
     */
    arrangeTooltips(): void;
    protected _tooltipToLocal(point: IPoint): IPoint;
    /**
     * Fully zooms out the chart.
     */
    zoomOut(): void;
}
//# sourceMappingURL=XYChart.d.ts.map