import { type AgDrawingMode, type AgRangeAreaSeriesOptions, type AgSeriesMarkerStyle, _ModuleSupport } from 'ag-charts-community';
import { ChartAxisDirection, type DomainWithMetadata } from 'ag-charts-core';
import { type RangeAreaSeriesDataAggregationFilter } from './rangeAreaAggregation';
import { type RangeAreaMarkerDatum, RangeAreaProperties } from './rangeAreaProperties';
import { type RangeAreaContext, type RangeAreaLabelDatum } from './rangeAreaUtil';
/**
 * Context object for efficient node datum creation.
 * Caches expensive-to-compute values that are reused across all datum iterations.
 */
interface RangeAreaSeriesNodeDatumContext extends _ModuleSupport.CartesianCreateNodeDataContext<RangeAreaMarkerDatum> {
    readonly yHighValues: any[];
    readonly yLowValues: any[];
    readonly xOffset: number;
    readonly xAxisRange: [number, number];
    readonly dataAggregationFilter: RangeAreaSeriesDataAggregationFilter | undefined;
    readonly range: number;
    readonly labelsEnabled: boolean;
    readonly yLowKey: string;
    readonly yHighKey: string;
    readonly item: RangeAreaProperties['item'];
    readonly yDomain: any[];
    readonly connectMissingData: boolean;
    readonly interpolation: RangeAreaProperties['interpolation'];
    labelData: RangeAreaLabelDatum[];
    spanPoints: Array<RangeAreaSpanPointDatum[] | {
        skip: number;
    }>;
}
declare class RangeAreaSeriesNodeEvent<TEvent extends string = _ModuleSupport.SeriesNodeEventTypes> extends _ModuleSupport.SeriesNodeEvent<RangeAreaMarkerDatum, TEvent> {
    readonly xKey?: string;
    readonly yLowKey?: string;
    readonly yHighKey?: string;
    constructor(type: TEvent, nativeEvent: Event, datum: RangeAreaMarkerDatum, series: RangeAreaSeries);
}
interface RangeAreaSpanPointDatum {
    high: _ModuleSupport.LineSpanPointDatum;
    low: _ModuleSupport.LineSpanPointDatum;
}
/**
 * Consolidated type interface for RangeAreaSeries.
 */
interface RangeAreaSeriesTypes extends _ModuleSupport.CartesianSeriesTypes {
    readonly node: _ModuleSupport.Marker;
    readonly options: AgRangeAreaSeriesOptions;
    readonly properties: RangeAreaProperties;
    readonly datum: RangeAreaMarkerDatum;
    readonly label: RangeAreaLabelDatum;
    readonly context: RangeAreaContext;
    readonly stackContext: never;
    readonly createNodeDataContext: RangeAreaSeriesNodeDatumContext;
}
type GetMarkerStyleArg<I extends number> = Parameters<_ModuleSupport.CartesianSeries<RangeAreaSeriesTypes>['getMarkerStyle']>[I];
export declare class RangeAreaSeries extends _ModuleSupport.CartesianSeries<RangeAreaSeriesTypes> {
    static readonly className = "RangeAreaSeries";
    static readonly type: "range-area";
    properties: RangeAreaProperties;
    protected readonly NodeEvent: typeof RangeAreaSeriesNodeEvent;
    private readonly aggregationManager;
    constructor(moduleCtx: _ModuleSupport.ModuleContext);
    renderToOffscreenCanvas(): boolean;
    processData(dataController: _ModuleSupport.DataController): Promise<void>;
    private aggregateData;
    private estimateTargetRange;
    /**
     * Creates the context object for efficient node datum creation.
     * Caches expensive-to-compute values that are reused across all datum iterations.
     */
    protected createNodeDatumContext(xAxis: _ModuleSupport.ChartAxis, yAxis: _ModuleSupport.ChartAxis): RangeAreaSeriesNodeDatumContext | undefined;
    xCoordinateRange(xValue: any): [number, number];
    yCoordinateRange(yValues: any[]): [number, number];
    getSeriesDomain(direction: ChartAxisDirection): DomainWithMetadata<any>;
    getSeriesRange(_direction: ChartAxisDirection, visibleRange: [number, number]): [number, number];
    /**
     * Processes a single datum and updates the context's marker, label, and span arrays.
     * Uses the scratch object to avoid per-iteration allocations.
     *
     * @param yHighValueOverride - Optional override for yHighValue, used in aggregation mode
     *                             when the extreme values come from different data points
     * @param yLowValueOverride - Optional override for yLowValue, used in aggregation mode
     */
    private handleDatumPoint;
    /**
     * Creates or updates marker datum for a single boundary (high or low).
     * Supports incremental updates by reusing existing marker data objects when possible.
     */
    private upsertMarkerDatum;
    protected populateNodeData(ctx: RangeAreaSeriesNodeDatumContext): void;
    protected finalizeNodeData(ctx: RangeAreaSeriesNodeDatumContext): void;
    protected initializeResult(ctx: RangeAreaSeriesNodeDatumContext): RangeAreaContext;
    protected assembleResult(ctx: RangeAreaSeriesNodeDatumContext, result: RangeAreaContext): RangeAreaContext;
    private getLowOrHighMarkerStyles;
    private createLabelData;
    protected isPathOrSelectionDirty(): boolean;
    protected strokewidthChange(): boolean;
    protected updatePathNodes(opts: {
        paths: _ModuleSupport.SegmentedPath[];
        visible: boolean;
        animationEnabled: boolean;
    }): void;
    protected updatePaths(opts: {
        contextData: RangeAreaContext;
        paths: _ModuleSupport.Path[];
    }): void;
    private updateAreaPaths;
    private updateFillPath;
    private updateStrokePath;
    protected resetDatumAnimation(data: _ModuleSupport.CartesianAnimationData<_ModuleSupport.Marker, RangeAreaMarkerDatum, RangeAreaLabelDatum, RangeAreaContext>): void;
    protected updateDatumSelection(opts: {
        nodeData: RangeAreaMarkerDatum[];
        datumSelection: _ModuleSupport.Selection<_ModuleSupport.Marker, RangeAreaMarkerDatum>;
    }): _ModuleSupport.Selection<_ModuleSupport.Marker, RangeAreaMarkerDatum>;
    protected updateDatumStyles({ datumSelection, isHighlight, }: {
        datumSelection: _ModuleSupport.Selection<_ModuleSupport.Marker, RangeAreaMarkerDatum>;
        isHighlight: boolean;
    }): void;
    protected updateDatumNodes(opts: {
        datumSelection: _ModuleSupport.Selection<_ModuleSupport.Marker, RangeAreaMarkerDatum>;
        isHighlight: boolean;
        drawingMode: AgDrawingMode;
    }): void;
    protected updateLabelSelection(opts: {
        labelData: RangeAreaLabelDatum[];
        labelSelection: _ModuleSupport.Selection<_ModuleSupport.Text, RangeAreaLabelDatum>;
    }): _ModuleSupport.Selection<_ModuleSupport.Text<any>, RangeAreaLabelDatum>;
    protected updateLabelNodes(opts: {
        labelSelection: _ModuleSupport.Selection<_ModuleSupport.Text, RangeAreaLabelDatum>;
        isHighlight?: boolean;
    }): void;
    protected getHighlightLabelData(labelData: RangeAreaLabelDatum[], highlightedItem: RangeAreaMarkerDatum): RangeAreaLabelDatum[];
    protected getHighlightData(nodeData: RangeAreaMarkerDatum[], highlightedItem: RangeAreaMarkerDatum): RangeAreaMarkerDatum[] | undefined;
    private getStyle;
    private getStylerMarkerOptions;
    private getStylerCouple;
    private makeStylerParams;
    private makeItemStylerParams;
    getTooltipContent(datumIndex: number, removeThisDatum: RangeAreaMarkerDatum | undefined): _ModuleSupport.TooltipContent | undefined;
    private legendItemSymbol;
    getLegendData(legendType: _ModuleSupport.ChartLegendType): _ModuleSupport.CategoryLegendDatum[];
    protected isLabelEnabled(): boolean;
    protected nodeFactory(): _ModuleSupport.Marker;
    animateEmptyUpdateReady(animationData: _ModuleSupport.CartesianAnimationData<_ModuleSupport.Marker, RangeAreaMarkerDatum, RangeAreaLabelDatum, RangeAreaContext>): void;
    protected animateReadyResize(animationData: _ModuleSupport.CartesianAnimationData<_ModuleSupport.Marker, RangeAreaMarkerDatum, RangeAreaLabelDatum, RangeAreaContext>): void;
    animateWaitingUpdateReady(animationData: _ModuleSupport.CartesianAnimationData<_ModuleSupport.Marker, RangeAreaMarkerDatum, RangeAreaLabelDatum, RangeAreaContext>): void;
    getFormattedMarkerStyle(datum: RangeAreaMarkerDatum): AgSeriesMarkerStyle & {
        size: number;
    };
    getMarkerStyle<TParams>(marker: _ModuleSupport.SeriesMarker<TParams>, datum: GetMarkerStyleArg<1>, params?: TParams, opts?: GetMarkerStyleArg<3>, defaultOverrideStyle?: GetMarkerStyleArg<4>, inheritedStyle?: GetMarkerStyleArg<5>): ReturnType<_ModuleSupport.CartesianSeries<RangeAreaSeriesTypes>['getMarkerStyle']>;
    protected computeFocusBounds(opts: _ModuleSupport.PickFocusInputs): _ModuleSupport.BBox | undefined;
    protected isDatumEnabled(nodeData: RangeAreaMarkerDatum[], datumIndex: number): boolean;
    protected hasItemStylers(): boolean;
}
export {};
