import type { SceneNode, LineSceneNode, AreaSceneNode, PointSceneNode, RectSceneNode, HeatcellSceneNode, Style, StreamScales, CurveType } from "./types";
import type { Datum } from "../charts/shared/datumTypes";
export declare function buildLineNode(data: Datum[], scales: StreamScales, xGet: (d: Datum) => number, yGet: (d: Datum) => number, style: Style, group?: string): LineSceneNode;
export declare function buildAreaNode(data: Datum[], scales: StreamScales, xGet: (d: Datum) => number, yGet: (d: Datum) => number, baselineY: number, style: Style, group?: string, y0Get?: (d: Datum) => number): AreaSceneNode;
/** Per-group-per-x stacked top values, keyed by group then x */
export type StackedTops = Map<string, Map<number, number>>;
export declare function buildStackedAreaNodes(groups: {
    key: string;
    data: Datum[];
}[], scales: StreamScales, xGet: (d: Datum) => number, yGet: (d: Datum) => number, styleFn: (group: string, sampleDatum?: Datum) => Style, normalize?: boolean, curve?: CurveType): {
    nodes: AreaSceneNode[];
    stackedTops: StackedTops;
};
export declare function buildPointNode(datum: Datum, scales: StreamScales, xGet: (d: Datum) => number, yGet: (d: Datum) => number, r: number, style: Style, pointId?: string): PointSceneNode | null;
export declare function buildRectNode(x: number, y: number, w: number, h: number, style: Style, datum: any, group?: string): RectSceneNode;
export declare function buildHeatcellNode(x: number, y: number, w: number, h: number, fill: string, datum: any, options?: {
    value?: number;
    showValues?: boolean;
    valueFormat?: (v: number) => string;
}): HeatcellSceneNode;
export interface SceneGraphData {
    nodes: SceneNode[];
    version: number;
}
export declare function createSceneGraph(): SceneGraphData;
export declare function updateSceneGraph(scene: SceneGraphData, nodes: SceneNode[]): SceneGraphData;
