import type { SankeyControllerDatasetOptions, SankeyDataPoint, SankeyNode } from '../types.js';
export type SankeyMode = 'edge' | 'even';
/**
 * Get all keys the input nodes flow to, including keys of the input nodes
 */
export declare const getAllKeysForward: (nodes: SankeyNode[], visited?: Set<string>) => string[];
/**
 * Find the nodes that should be placed leftmost on the chart.
 * NOTE: With circular flows, data order matters.
 */
export declare const startColumn: (data: SankeyDataPoint[], nodes: SankeyNode[]) => string[];
export declare function calculateX(nodeMap: Map<string, SankeyNode>, data: SankeyDataPoint[], mode: SankeyMode): number;
export declare const returnsToNearerColumn: (current: SankeyNode, next?: SankeyNode) => boolean;
export declare function calculateY(nodeArray: SankeyNode[], maxX: number): number;
export declare function calculateYUsingPriority(nodeArray: SankeyNode[], maxX: number): number;
/**
 * @return {number} maxY
 */
export declare function addPadding(nodeArray: Pick<SankeyNode, 'x' | 'y' | 'in' | 'out' | 'size'>[], padding: number): number;
export declare function sortFlows(nodeArray: SankeyNode[]): void;
interface LayoutOptions {
    /** use node priority when sorting nodes vertically */
    priority: boolean;
    /** canvas height (in pixels) */
    height: number;
    /** vertical padding between nodes (in pixels) */
    nodePadding: number;
    /** layout mode in x-direction */
    modeX: SankeyControllerDatasetOptions['modeX'];
}
export declare function layout(nodes: Map<string, SankeyNode>, data: SankeyDataPoint[], { priority, height, nodePadding, modeX }: LayoutOptions): {
    maxY: number;
    maxX: number;
};
export {};
