import type { InternalAgColorType, Point, SizedPoint } from 'ag-charts-core';
import type { AgSeriesMarkerStyle, TextOrSegments } from 'ag-charts-types';
import type { NodeUpdateState } from '../../../motion/fromToMotion';
import type { Path } from '../../../scene/shape/path';
import type { Segment } from '../../../scene/shape/segmentedPath';
import type { SeriesNodeStyleContext } from '../series';
import type { SeriesNodeDatum } from '../seriesTypes';
import type { CartesianSeriesNodeDataContext, CartesianSeriesNodeDatum } from './cartesianSeriesTypes';
import { type SpanInterpolation } from './lineInterpolationUtil';
import { type LinePathSpan, type SpanAnimation } from './lineUtil';
export type AreaFillPathDatum = {
    readonly spans: LinePathSpan[];
    readonly phantomSpans: LinePathSpan[];
};
export type AreaStrokePathDatum = {
    readonly spans: LinePathSpan[];
};
export interface MarkerSelectionDatum extends CartesianSeriesNodeDatum {
    readonly xValue: NonNullable<CartesianSeriesNodeDatum['xValue']>;
    readonly yValue: NonNullable<CartesianSeriesNodeDatum['yValue']>;
    readonly point: Readonly<SizedPoint>;
    readonly yKey: string;
    readonly fill?: InternalAgColorType;
    readonly stroke?: string;
    readonly strokeWidth: number;
    readonly cumulativeValue: number;
    readonly selected: boolean | undefined;
    style?: AgSeriesMarkerStyle;
}
export interface LabelSelectionDatum extends Readonly<Point>, SeriesNodeDatum<number> {
    readonly itemId?: never;
    readonly labelText: TextOrSegments;
}
export interface AreaSeriesNodeDataContext extends CartesianSeriesNodeDataContext<MarkerSelectionDatum, LabelSelectionDatum> {
    fillData: AreaFillPathDatum;
    strokeData: AreaStrokePathDatum;
    stackVisible: boolean;
    crossFiltering: boolean;
    styles: SeriesNodeStyleContext<AgSeriesMarkerStyle>;
    segments?: Segment[];
}
export declare function plotAreaPathFill({ path }: Path, { spans, phantomSpans }: AreaFillPathDatum): void;
export declare function plotInterpolatedAreaSeriesFillSpans(ratio: number, { path }: Path, spans: SpanInterpolation[], fillPhantomSpans: SpanInterpolation[]): void;
export declare function prepareAreaFillAnimationFns(status: NodeUpdateState, spans: SpanAnimation, fillPhantomSpans: SpanAnimation, visibleToggleMode: 'fade' | 'none'): {
    status: NodeUpdateState;
    path: {
        addPhaseFn: (ratio: number, path: Path) => void;
        updatePhaseFn: (ratio: number, path: Path) => void;
        removePhaseFn: (ratio: number, path: Path) => void;
    };
    pathProperties: import("../../../motion/fromToMotion").FromToFns<Path<any>, any, unknown>;
};
export declare function prepareAreaPathAnimation(newData: AreaSeriesNodeDataContext, oldData: AreaSeriesNodeDataContext): {
    status: NodeUpdateState;
    fill: {
        status: NodeUpdateState;
        path: {
            addPhaseFn: (ratio: number, path: Path<any>) => void;
            updatePhaseFn: (ratio: number, path: Path<any>) => void;
            removePhaseFn: (ratio: number, path: Path<any>) => void;
        };
        pathProperties: import("../../../motion/fromToMotion").FromToFns<Path<any>, any, unknown>;
    };
    stroke: {
        status: NodeUpdateState;
        path: {
            addPhaseFn: (ratio: number, path: Path<any>) => void;
            updatePhaseFn: (ratio: number, path: Path<any>) => void;
            removePhaseFn: (ratio: number, path: Path<any>) => void;
        };
        pathProperties: import("../../../motion/fromToMotion").FromToFns<Path<any>, any, unknown>;
    };
} | undefined;
