import type { Point } from "../../../../Core/Point";
import type { Rect } from "../../../../Core/Rect";
import type { EDataLabelProviderType } from "../../../../types/DataLabelProviderType";
import type { TDataLabelStyle } from "../../../../types/TDataLabelStyle";
import type { TSciChart, TSRTextBounds } from "../../../../types/TSciChart";
import type { WebGlRenderContext2D } from "../../../Drawing/WebGlRenderContext2D";
import type { RenderPassData } from "../../../Services/RenderPassData";
import type { IThemeProvider } from "../../../Themes/IThemeProvider";
import type { IRenderableSeries } from "../IRenderableSeries";
export type TDataLabel = {
    text: string;
    /** The start point for text drawing.
     *  This is not the top left of the text rectangle, since the y value for text is on the alphabetic baseline
     *  Difference is bounds.GetLineBounds(0).m_fHeight
     */
    position: Point;
    /** The Rectangle that contains the label, relative to the seriesViewRect */
    rect: Rect;
    color?: number;
    dataX: number;
    dataY: number;
    rotationAngle: number;
    rotationCenter: Point;
};
export interface IBaseDataLabelProviderOptions {
    /**
     * Sets the text style used for data labels. The style must be set, with fontFamily and fontSize set, in order for text to be drawn.
     */
    style?: TDataLabelStyle;
    /**
     * Sets the color for data labels.  Defaults to axis label color
     */
    color?: string;
    /**
     * Draws immediately, set this True when using sub-surfaces for proper data label layering
     */
    drawImmediate?: boolean;
}
export declare abstract class BaseDataLabelProvider {
    readonly type: EDataLabelProviderType;
    /**
     * The text to draw, along with the sizes and positions.  Usually generated, but can be updated before final drawing
     */
    dataLabels: TDataLabel[];
    /**
     * Draws immediately, set this True when using sub-surfaces for proper data label layering
     */
    drawImmediate: boolean;
    /**
     * The {@link TSciChart | SciChart 2D WebAssembly Context} containing native methods and
     * access to our WebGL2 Engine and WebAssembly numerical methods
     */
    protected webAssemblyContext: TSciChart;
    /**
     * The Parent {@link IRenderableSeries | RenderableSeries}
     */
    protected parentSeries: IRenderableSeries;
    /**
     * Reusable native text-bounds buffer, allocated once at attach time.
     * Hoisted here so allocation never happens on the render path — first-time
     * native allocation can grow the WASM heap and detach any Float64Array
     * views captured earlier in the same frame (e.g. inside a DataLabelState).
     */
    protected textBounds: TSRTextBounds;
    protected styleProperty: TDataLabelStyle;
    protected colorProperty: string;
    protected get useRotation(): boolean;
    private getstyleProxy;
    /**
     * Creates an instance of the {@link DataLabelProvider}
     */
    constructor(options?: IBaseDataLabelProviderOptions);
    /**
     * Called when a DataLabelProvider is attached to a parent {@link IRenderableSeries | RenderableSeries}
     * @param webAssemblyContext
     * @param parentSeries
     */
    onAttach(webAssemblyContext: TSciChart, parentSeries: IRenderableSeries): void;
    onDetach(): void;
    delete(): void;
    /**
     * Gets or sets the text style used for data labels. The style must be set, with fontFamily and fontSize set, in order for text to be drawn.
     */
    get style(): TDataLabelStyle;
    /**
     * Gets or sets the text style used for data labels. The style must be set, with fontFamily and fontSize set, in order for text to be drawn.
     */
    set style(value: TDataLabelStyle);
    /**
     * Gets or sets the color for data labels.  Defaults to axis label color
     */
    get color(): string;
    /**
     * Gets or sets the color for data labels.  Defaults to axis label color
     */
    set color(value: string);
    /** Update the style.  Only the properties passed will be updated */
    updateStyle(value: TDataLabelStyle): void;
    /**
     * Base behaviour is to do nothing.  Labels will only be drawn if they have been manually set
     */
    generateDataLabels(renderContext: WebGlRenderContext2D, renderPassData: RenderPassData): void;
    draw(renderContext: WebGlRenderContext2D): void;
    resolveAutoColors(index: number, maxSeries: number, theme: IThemeProvider): void;
    toJSON(): {
        type: EDataLabelProviderType;
        options: {
            style: TDataLabelStyle;
            color: string;
        };
    };
    protected invalidateParent(): void;
    protected getLineSpacing(): number;
}
