/**
 * Transition animation for XY pipeline scene nodes.
 *
 * Handles identity-based enter/update/exit transitions:
 *   - snapshotPositions: captures current scene state before rebuild
 *   - getNodeIdentity: stable key generation per node type
 *   - startTransition: sets up interpolation from old→new positions
 *   - advanceTransition: per-frame tick with easing
 *
 * Dependencies: pipelineTransitionUtils (lerp, easing, ActiveTransition)
 * Consumed by: PipelineStore.computeScene (after decay/pulse)
 */
import type { SceneNode, TransitionConfig } from "./types";
import type { ActiveTransition } from "./pipelineTransitionUtils";
import type { Datum } from "../charts/shared/datumTypes";
export type PrevPosition = {
    x: number;
    y: number;
    w?: number;
    h?: number;
    r?: number;
    opacity?: number;
    openY?: number;
    closeY?: number;
    highY?: number;
    lowY?: number;
};
export type PrevPath = {
    topPath?: [number, number][];
    bottomPath?: [number, number][];
    path?: [number, number][];
    opacity?: number;
};
/** Context needed from PipelineStore for identity resolution */
export interface TransitionContext {
    runtimeMode?: "streaming" | "bounded";
    getX: (d: Datum) => number;
    getY: (d: Datum) => number;
    getCategory?: (d: Datum) => string;
}
/**
 * Get a stable identity key for a scene node.
 *
 * Exit stubs (created during startTransition for scrolled-off nodes) have
 * `datum: null` and carry their original identity on `_transitionKey`. If a
 * new transition starts while exits are still in the scene, resolving their
 * identity via the datum-less fallback (e.g. `c:${index}`) would reshuffle
 * which exit matches which key on the next snapshot. Preferring the stored
 * `_transitionKey` keeps exits stable across overlapping transitions.
 */
export declare function getNodeIdentity(ctx: TransitionContext, node: SceneNode, index: number): string | null;
/**
 * Snapshot current scene node positions before rebuild.
 */
export declare function snapshotPositions(ctx: TransitionContext, scene: SceneNode[], prevPositionMap: Map<string, PrevPosition>, prevPathMap: Map<string, PrevPath>): void;
export interface TransitionState {
    scene: SceneNode[];
    exitNodes: SceneNode[];
    activeTransition: ActiveTransition | null;
}
/**
 * After scene rebuild, set up transition from old to new positions.
 * Detects entering nodes (new, no prev match) and exiting nodes (prev, no new match).
 * Mutates scene and exitNodes in place. Returns updated state.
 */
export declare function startTransition(ctx: TransitionContext, transition: TransitionConfig, state: TransitionState, prevPositionMap: Map<string, PrevPosition>, prevPathMap: Map<string, PrevPath>): TransitionState;
/**
 * Advance the transition animation. Returns true if still animating.
 * Mutates scene nodes in place.
 */
export declare function advanceTransition(now: number, transition: TransitionConfig, state: TransitionState, prevPositionMap: Map<string, PrevPosition>, _prevPathMap: Map<string, PrevPath>): boolean;
