import type { Point, Scale, SizedPoint } from 'ag-charts-core';
import type { AgDrawingMode, AgMarkerShape, AgSeriesMarkerStyle } from 'ag-charts-types';
import type { ExtraOpts, NodeUpdateState } from '../../../motion/fromToMotion';
import { BBox } from '../../../scene/bbox';
import type { Node } from '../../../scene/node';
import type { Selection } from '../../../scene/selection';
import type { AnimationManager } from '../../interaction/animationManager';
import { Marker } from '../../marker/marker';
import type { PickFocusInputs } from '../series';
import type { SeriesMarker } from '../seriesMarker';
import { HighlightState } from '../seriesProperties';
import type { DatumIndexType, ISeries, NodeDataDependant, SeriesNodeDatum } from '../seriesTypes';
import type { CartesianSeriesNodeDatum } from './cartesianSeriesTypes';
type NodeWithDrawingMode = Node & {
    drawingMode?: AgDrawingMode;
};
type NodeWithOpacity = NodeWithDrawingMode & {
    opacity: number;
};
type MarkerFadeInOptions = Partial<ExtraOpts<NodeWithOpacity>>;
type MarkerSwipeScaleInOptions = Partial<ExtraOpts<NodeWithDrawingMode>>;
export declare function markerFadeInAnimation<T>({ id }: {
    id: string;
}, animationManager: AnimationManager, status?: NodeUpdateState, options?: MarkerFadeInOptions, ...markerSelections: Selection<NodeWithOpacity, T>[]): void;
export declare function markerScaleInAnimation<T>({ id }: {
    id: string;
}, animationManager: AnimationManager, ...markerSelections: Selection<Node, T>[]): void;
export declare function markerSwipeScaleInAnimation<T extends CartesianSeriesNodeDatum>({ id, nodeDataDependencies }: {
    id: string;
} & NodeDataDependant, animationManager: AnimationManager, options?: MarkerSwipeScaleInOptions, ...markerSelections: Selection<NodeWithDrawingMode, T>[]): void;
export declare function resetMarkerFn(_node: NodeWithOpacity & Node): {
    opacity: number;
    scalingX: number;
    scalingY: number;
};
/**
 * Optimised reset for marker selections that bypasses resetMotion callback overhead.
 * Uses direct backing field writes via Marker.resetAnimationProperties().
 *
 * @param selections - Marker selections to reset
 */
export declare function resetMarkerSelectionsDirect<D extends CartesianSeriesNodeDatum>(selections: {
    nodes(): Iterable<Marker>;
    cleanup(): void;
    batchedUpdate(fn: () => void): void;
}[]): void;
export declare function resetMarkerPositionFn<T extends CartesianSeriesNodeDatum>(_node: Node, datum: T): {
    x: number;
    y: number;
    scalingCenterX: number;
    scalingCenterY: number;
};
interface MarkerNodeDatum extends SeriesNodeDatum<DatumIndexType> {
    readonly point: Point & SizedPoint;
}
interface MarkerSeries<TDatum extends MarkerNodeDatum> extends ISeries<number, TDatum, unknown, unknown> {
    getNodeData(): {
        [index: number]: TDatum | undefined;
    } | undefined;
    getFormattedMarkerStyle(datum: TDatum): {
        size: number;
        shape?: AgMarkerShape;
    };
}
export declare function computeMarkerFocusBounds<TDatum extends MarkerNodeDatum>(series: MarkerSeries<TDatum>, { datumIndex }: PickFocusInputs): BBox | undefined;
export declare function markerEnabled(dataCount: number, scale: Scale<unknown, number, unknown>, marker: {
    enabled: boolean;
}, markerStyle?: {
    enabled?: boolean;
}): boolean;
type SeriesStyler<TStylerParams, TStylerResult> = (params: TStylerParams) => TStylerResult;
type DefaultOverrideStyle = AgSeriesMarkerStyle & {
    size: number;
};
interface MarkerSeriesStylerProps<TStylerParams, TStylerResult> {
    properties: {
        styler?: SeriesStyler<TStylerParams, TStylerResult>;
    };
    getMarkerStyle<TParams>(marker: SeriesMarker<TParams>, nodeDatum: object, params?: TParams, opts?: {
        highlightState?: HighlightState;
    }, defaultOverrideStyle?: DefaultOverrideStyle, inheritedStyle?: AgSeriesMarkerStyle): AgSeriesMarkerStyle & {
        size: number;
    };
}
type LineProperties = {
    stroke?: string;
    strokeWidth: number;
    strokeOpacity: number;
};
export declare function getMarkerStyles<TStylerParams, TStylerResult, TItemStylerParams>(series: MarkerSeriesStylerProps<TStylerParams, TStylerResult>, line: LineProperties, marker: SeriesMarker<TItemStylerParams>, inheritedStyle?: AgSeriesMarkerStyle): Record<HighlightState, AgSeriesMarkerStyle>;
export {};
