import type { Scale } from 'ag-charts-core';
import { ChartAxisDirection } from 'ag-charts-core';
import type { ApplyFn, FromToMotionPropFn, NodeUpdateState } from '../../../motion/fromToMotion';
import { BBox } from '../../../scene/bbox';
import type { Rect } from '../../../scene/shape/rect';
import type { ChartAxis } from '../../chartAxis';
import type { DatumIndexType, ISeries } from '../seriesTypes';
export declare function checkCrisp(scale: Scale<any, any> | undefined, visibleRange: number[] | undefined, smallestDataInterval: number | undefined, largestDataInterval: number | undefined): boolean;
export type InitialPosition<T> = {
    isVertical: boolean;
    mode: 'normal' | 'fade';
    calculate: (datum: T, prevDatum?: T) => T;
};
export declare function collapsedStartingBarPosition(isVertical: boolean, axes: {
    [K in ChartAxisDirection]?: ChartAxis;
}, mode: 'normal' | 'fade'): InitialPosition<AnimatableBarDatum>;
export declare function midpointStartingBarPosition(isVertical: boolean, mode: 'normal' | 'fade'): InitialPosition<AnimatableBarDatum>;
type AnimatableBarDatum = {
    x: number;
    y: number;
    height: number;
    width: number;
    clipBBox?: BBox;
    opacity?: number;
};
type RectDatum = {
    crisp: boolean;
};
type BarRect = Rect<RectDatum>;
export declare function prepareBarAnimationFunctions<T extends AnimatableBarDatum>(initPos: InitialPosition<T>, unknownStatus: NodeUpdateState): {
    toFn: FromToMotionPropFn<BarRect, AnimatableBarDatum, T>;
    fromFn: FromToMotionPropFn<BarRect, AnimatableBarDatum, T>;
    applyFn: ApplyFn<BarRect, AnimatableBarDatum>;
};
export declare function resetBarSelectionsFn(rect: BarRect, { x, y, width, height, clipBBox, opacity }: AnimatableBarDatum): {
    x: number;
    y: number;
    width: number;
    height: number;
    clipBBox: BBox | undefined;
    opacity: number;
    crisp: any;
};
/**
 * High-performance direct reset for bar selections.
 * Bypasses resetMotion callback pattern and decorator system entirely.
 * Uses batchedUpdate to consolidate markDirty calls per selection.
 */
export declare function resetBarSelectionsDirect<D extends AnimatableBarDatum & {
    crisp?: boolean;
}>(selections: {
    nodes(): Iterable<Rect<D>>;
    cleanup(): void;
    batchedUpdate(fn: () => void): void;
}[]): void;
export declare function computeBarFocusBounds(series: ISeries<DatumIndexType, unknown, unknown>, datum: {
    x: number;
    y: number;
    width: number;
    height: number;
} | undefined): BBox | undefined;
export {};
