import type { ELayoutStrategyType } from "../../types/LayoutStrategyType";
import type { AxisBase2D } from "../Visuals/Axis/AxisBase2D";
import type { SciChartSurface } from "../Visuals/SciChartSurface";
import type { TLayoutAxisPartsWithStrategyFunc } from "./AxisLayoutHelpers";
import type { ChartLayoutState } from "./ChartLayoutState";
/**
 * The Base Axis Layout Strategy
 */
export declare abstract class BaseAxisLayoutStrategy {
    abstract readonly type: ELayoutStrategyType;
    readonly isStacked: boolean;
    /**
     * The  {@link LayoutAxisPartsStrategy} for current Axis Layout Strategy
     */
    protected layoutAxisPartsStrategy: TLayoutAxisPartsWithStrategyFunc;
    /**
     * Measures required amount of space to place axes which are currently attached to the SciChartSurface {@link SciChartSurface} instance.
     * For vertical axes - total required width of the area, for horizontal - total required height.
     * @param sciChartSurface
     * @param chartLayoutState
     * @param axes
     */
    abstract measureAxes(sciChartSurface: SciChartSurface, chartLayoutState: ChartLayoutState, axes: AxisBase2D[]): number;
    /**
     * Updates chart layout state accordingly to axes required space in axisSize dimension.
     * Updates different areas based on strategy type.
     * @param sciChartSurface
     * @param chartLayoutState
     */
    abstract updateAreaSize(chartLayoutState: ChartLayoutState, requiredSize: number): void;
    /**
     * Perform layout on axes which use this layout strategy
     *
     * @param left   left position of area relative to parent {@link SciChartSurface}
     * @param top    top position of area relative to parent {@link SciChartSurface}
     * @param right  right position of area relative to parent {@link SciChartSurface}
     * @param bottom bottom position of area relative to parent {@link SciChartSurface}
     */
    abstract layoutAxes(left: number, top: number, right: number, bottom: number, axes: AxisBase2D[]): void;
    toJSON(): {
        type: ELayoutStrategyType;
    };
    protected updateAxisLayoutState(axis: AxisBase2D): void;
    protected updateLeftAndRightChartLayoutState(chartLayoutState: ChartLayoutState, additionalLeftSize: number, additionalRightSize: number): void;
    protected updateTopAndBottomChartLayoutState(chartLayoutState: ChartLayoutState, additionalTopSize: number, additionalBottomSize: number): void;
    protected layoutAxesFromBottomToTop(left: number, top: number, right: number, bottom: number, axes: AxisBase2D[]): void;
    protected layoutAxesFromTopToBottom(left: number, top: number, right: number, bottom: number, axes: AxisBase2D[]): void;
    protected layoutAxesFromLeftToRight(left: number, top: number, right: number, bottom: number, axes: AxisBase2D[]): void;
    protected layoutAxesFromRightToLeft(left: number, top: number, right: number, bottom: number, axes: AxisBase2D[]): void;
    protected calculateTotalAxisHeight(axis: AxisBase2D, totalAxisAreaHeight: number): number;
    protected calculateTotalAxisWidth(axis: AxisBase2D, totalAxisAreaHeight: number): number;
}
