import type { TAxis3DDefinition, TLabelProviderDefinition } from "../../../Builder/types/AxisDefinitions";
import type { IThemeable } from "../../../Charting/Themes/IThemeable";
import type { IThemeProvider } from "../../../Charting/Themes/IThemeProvider";
import { AxisCore } from "../../../Charting/Visuals/Axis/AxisCore";
import type { IAxisCoreOptions } from "../../../Charting/Visuals/Axis/IAxisCoreOptions";
import type { ILabelOptions } from "../../../Charting/Visuals/Axis/LabelProvider/LabelProvider";
import type { LabelProviderBase2D } from "../../../Charting/Visuals/Axis/LabelProvider/LabelProviderBase2D";
import { NumberRange } from "../../../Core/NumberRange";
import type { ObservableArray } from "../../../Core/ObservableArray";
import type { TAxisLabelStyle3D } from "../../../types/AxisLabelStyle3D";
import type { TAxisTitleStyle3D } from "../../../types/AxisTitleStyle3D";
import type { E3DLabelOrientationMode, E3DTitleRotationMode, TTextStyleBase3D } from "../../../types/TextStyle3D";
import type { TSciChart3D } from "../../../types/TSciChart3D";
import type { IRenderableSeries3D } from "../RenderableSeries/BaseRenderableSeries3D";
import type { SciChart3DSurface } from "../SciChart3DSurface";
import type { EAxisSideClipping } from "./EAxisSideClipping";
import type { ETextAlignment3D } from "./ETextAlignment3D";
import type { IAxisDescriptor } from "./IAxisDescriptor";
/**
 * Optional parameters passed to {@link AxisBase3D} constructor to set defaults at construction time
 */
export interface IAxisBase3dOptions extends IAxisCoreOptions, ILabelOptions {
    /**
     * Gets or sets tick labels offset from the axis plane
     */
    tickLabelsOffset?: number;
    /**
     * Gets or sets title text offset from the axis plane
     */
    titleOffset?: number;
    /**
     * Sets the Plane border color as an HTML Color string
     */
    planeBorderColor?: string;
    /**
     * Sets the plane border thickness in world units
     */
    planeBorderThickness?: number;
    /**
     * Sets the plane background color as an HTML Color string
     */
    planeBackgroundFill?: string;
    /**
     * Sets a {@link LabelProvider} - a class which is responsible for formatting axis labels and cursor labels from numeric values
     */
    labelProvider?: LabelProviderBase2D | TLabelProviderDefinition;
    /**
     * Style for axis labels
     */
    labelStyle?: TTextStyleBase3D;
    /**
     * Style for axis title
     */
    axisTitleStyle?: TTextStyleBase3D;
    /**
     * Orientation mode for axis labels. Default horizontal.
     */
    labelOrientationMode?: E3DLabelOrientationMode;
    /**
     * Orientation mode for axis titles. Default horizontal.
     */
    titleOrientationMode?: E3DTitleRotationMode;
}
/**
 * Which axis - used for calculations
 */
export declare enum EWhichAxis {
    xAxis = "xAxis",
    yAxis = "yAxis",
    zAxis = "zAxis"
}
/**
 * The base class for 3D Chart Axis within SciChart - High Performance
 * {@link https://www.scichart.com/javascript-chart-features | JavaScript 3D Charts}.
 * @description
 * AxisBase3D is a base class for both 3D Axis types in SciChart. Concrete types include:
 *
 *  - {@link NumericAxis3D}: a Numeric 3D value-axis
 *
 * Set axis on the {@link SciChart3DSurface.xAxis}, {@link SciChart3DSurface.yAxis} or {@link SciChart3DSurface.zAxis} in 3D Charts.
 */
export declare abstract class AxisBase3D extends AxisCore implements IThemeable {
    /**
     * Gets the parent {@link SciChart3DSurface} that this axis is attached to
     */
    parentSurface: SciChart3DSurface;
    /**
     * The {@link TSciChart3D | SciChart 3D WebAssembly Context} containing native methods and
     * access to our WebGL2 Engine and WebAssembly numerical methods
     */
    protected readonly webAssemblyContext3D: TSciChart3D;
    private getlabelStyleProxy;
    protected labelStyleProperty: TAxisLabelStyle3D;
    protected titleStyleProperty: TAxisTitleStyle3D;
    private labelDepthTestEnabledProperty;
    private planeBorderThicknessProperty;
    private planeBorderColorProperty;
    private tickLabelAlignmentProperty;
    private negativeSideClippingProperty;
    private positiveSideClippingProperty;
    private axisPlaneBackgroundFillProperty;
    private isYAxisProperty;
    private isZAxisProperty;
    private titleOffsetProperty;
    private tickLabelsOffsetProperty;
    private labelOrientationModeProperty;
    private titleOrientationModeProperty;
    /**
     * Creates an instance of the {@link AxisBase3D}
     * @param webAssemblyContext The {@link TSciChart3D | SciChart 3D WebAssembly Context} containing native methods and
     * access to our WebGL2 Engine and WebAssembly numerical methods
     * @param options optional parameters of type {@link IAxisBase3dOptions} to pass to the constructor
     * @protected
     */
    protected constructor(webAssemblyContext: TSciChart3D, options?: IAxisBase3dOptions);
    /**
     * Gets or sets a {@link TAxisLabelStyle3D} object for styling axis labels
     */
    get labelStyle(): TAxisLabelStyle3D;
    /**
     * Gets or sets a {@link TAxisLabelStyle3D} object for styling axis labels
     */
    set labelStyle(textStyle: TAxisLabelStyle3D);
    /**
     * Gets or sets a {@link TAxisLabelStyle3D} object for styling axis labels
     */
    get titleStyle(): TAxisTitleStyle3D;
    /**
     * Gets or sets a {@link TAxisLabelStyle3D} object for styling axis labels
     */
    set titleStyle(value: TAxisTitleStyle3D);
    /**
     * @inheritDoc
     */
    applyTheme(themeProvider: IThemeProvider): void;
    /**
     * Used internally - gets whether this axis is a Y Axis
     */
    get isYAxis(): boolean;
    /**
     * Used internally - sets whether this axis is a Y Axis
     */
    setIsYAxis(isYAxis: boolean): void;
    /**
     * Used internally - gets whether this axis is a Z Axis
     */
    get isZAxis(): boolean;
    /**
     * Used internally - sets whether this axis is a Z Axis
     */
    setIsZAxis(isZAxis: boolean): void;
    /**
     * Gets or sets if Label Depth test is enabled
     * @description When true, Labels are rendered with depth and can be behind chart objects.
     * Else, labels are always on top and closest to the viewer
     */
    get labelDepthTestEnabled(): boolean;
    /**
     * Gets or sets if Label Depth test is enabled
     * @description When true, Labels are rendered with depth and can be behind chart objects.
     * Else, labels are always on top and closest to the viewer
     */
    set labelDepthTestEnabled(labelDepthTestEnabled: boolean);
    /**
     * Gets or sets a thickness of the axis plane border.
     */
    get planeBorderThickness(): number;
    /**
     * Gets or sets a thickness of the axis plane border.
     */
    set planeBorderThickness(planeBorderThickness: number);
    /**
     * Gets or sets the color of the axis plane border as an HTML Color code
     */
    get planeBorderColor(): string;
    /**
     * Gets or sets the color of the axis plane border as an HTML Color code
     */
    set planeBorderColor(planeBorderColor: string);
    /**
     * Gets or sets the Axis Label Alignment. See {@link ETextAlignment3D} for a list of values
     */
    get tickLabelAlignment(): ETextAlignment3D;
    /**
     * Gets or sets the Axis Label Alignment. See {@link ETextAlignment3D} for a list of values
     */
    set tickLabelAlignment(tickLabelAlignment: ETextAlignment3D);
    /**
     * Gets or sets a value determining how {@link BaseRenderableSeries3D | 3D RenderableSeries} are clipped by axis on the positive side
     * @remarks See {@link EAxisSideClipping} for a list of values
     */
    get positiveSideClipping(): EAxisSideClipping;
    /**
     * Gets or sets a value determining how {@link BaseRenderableSeries3D | 3D RenderableSeries} are clipped by axis on the positive side
     * @remarks See {@link EAxisSideClipping} for a list of values
     */
    set positiveSideClipping(positiveSideClipping: EAxisSideClipping);
    /**
     * Gets or sets a value determining how {@link BaseRenderableSeries3D | 3D RenderableSeries} are clipped by axis on the negative side
     * @remarks See {@link EAxisSideClipping} for a list of values
     */
    get negativeSideClipping(): EAxisSideClipping;
    /**
     * Gets or sets a value determining how {@link BaseRenderableSeries3D | 3D RenderableSeries} are clipped by axis on the negative side
     * @remarks See {@link EAxisSideClipping} for a list of values
     */
    set negativeSideClipping(negativeSideClipping: EAxisSideClipping);
    /**
     * Gets or sets the fill of the Axis Plane background as an HTML Color code. Defaults to transparent
     */
    get axisPlaneBackgroundFill(): string;
    /**
     * Gets or sets the fill of the Axis Plane background as an HTML Color code. Defaults to transparent
     */
    set axisPlaneBackgroundFill(axisPlaneBackgroundFill: string);
    /**
     *  Gets or sets title text offset from the axis plane
     */
    get titleOffset(): number;
    /**
     *  Gets or sets title text offset from the axis plane
     */
    set titleOffset(value: number);
    /**
     * Gets or sets the color of the background of the axis plane as an HTML Color code
     */
    get backgroundColor(): string;
    /**
     * Gets or sets the color of the background of the axis plane as an HTML Color code
     */
    set backgroundColor(value: string);
    /**
     * Gets or sets tick labels offset from the axis plane
     */
    get tickLabelsOffset(): number;
    /**
     * Gets or sets tick labels offset from the axis plane
     */
    set tickLabelsOffset(value: number);
    /**
     * Gets or sets axis label orientation mode
     */
    get labelOrientationMode(): E3DLabelOrientationMode;
    /**
     * Gets or sets axis label orientation mode
     */
    set labelOrientationMode(value: E3DLabelOrientationMode);
    /**
     * Gets or sets axis title orientation mode
     */
    get titleOrientationMode(): E3DTitleRotationMode;
    /**
     * Gets or sets axis title orientation mode
     */
    set titleOrientationMode(value: E3DTitleRotationMode);
    onAttach(parentSurface: SciChart3DSurface, isXaxis: boolean, isYAxis: boolean, isZAxis: boolean): void;
    /**
     * Called internally - returns an {@link IAxisDescriptor} which contains parameters, property and data
     * to pass to the WebAssembly 3D Engine for drawing this axis
     */
    toAxisDescriptor(): IAxisDescriptor;
    validateAxis(): void;
    /**
     * @Summary Part of AutoRanging - Gets the maximum range on this axis
     * @description The getMaximumRange function computes the {@link visibleRange} min and max that this axis must
     * have to display all the data in the chart.
     */
    getMaximumRange(): NumberRange;
    /**
     * @Summary Part of AutoRanging - Gets the maximum range on this axis.
     * @description The getMaximumRange function computes the {@link visibleRange} min and max that this axis must
     * have to display all the data in the chart.
     * @remarks This overload impersonates a specific axis according to the {@link EWhichAxis} parameter
     * @param whichAxis Which axis we should calculate as. See {@link EWhichAxis} for a list of values
     * @param renderableSeries The series to use for calculations
     */
    getMaximumRangeAs(renderableSeries: ObservableArray<IRenderableSeries3D>, whichAxis: EWhichAxis): NumberRange;
    /**
     * gets the axis size from the WorldDimensions, depending on whether it is an X,Y or ZAxis
     */
    getAxisSize(): number;
    /**
     * Given an array of numeric values for axis labels, returns a list of strings. Uses {@link labelProvider} property to format labels
     * @param majorTicks The major tick values as numbers to be converted to labels
     * @protected
     */
    protected getLabels(majorTicks: number[]): string[];
    private getTicks;
    private getTickCoordsAndLabels;
    toJSON(): TAxis3DDefinition;
}
