import type { SankeyNode as D3SankeyNode } from 'd3-sankey'; import type { TransformValue, TransformValueOutput } from './transform.js'; import type { ChartBounds, ChartKey, ChartMark, ChartMarkDatum, ChartMarkPointX, ChartMarkPointY, ChartMarkMotionOptions } from './types.js'; type AnyChartMark = ChartMark; type SankeyMarks = readonly [AnyChartMark, ...AnyChartMark[]]; type ResolvedKey = Extract, ChartKey>; export type SankeyAlignment = 'left' | 'right' | 'center' | 'justify'; type SankeyAlignmentNodeDatum = { readonly data: TNode; readonly key: TNodeKey; readonly sourceIndex: number; }; type SankeyAlignmentLinkDatum = { readonly data: TLink; readonly key: ChartKey; readonly sourceIndex: number; }; /** The private D3 node supplied to a custom alignment callable. */ export type SankeyAlignmentNode = D3SankeyNode, SankeyAlignmentLinkDatum>; /** A native D3-compatible horizontal node-layer aligner. */ export type SankeyNodeAligner = (node: SankeyAlignmentNode, columnCount: number) => number; export interface SankeyInset { readonly top?: number; readonly right?: number; readonly bottom?: number; readonly left?: number; } export type SankeyLayoutValue = TValue | ((chart: ChartBounds) => TValue); export interface SankeyEndpointContext { readonly kind: 'node'; readonly key: TNodeKey; readonly data: TNode; readonly source: readonly TNode[]; readonly sourceIndexes: readonly number[]; readonly index: number; } export interface SankeyNodeContext extends SankeyEndpointContext { readonly depth: number; readonly height: number; readonly value: number; } export interface SankeyLinkContext { readonly kind: 'link'; readonly key: ChartKey; readonly data: TLink; readonly sourceRows: readonly TLink[]; readonly sourceIndexes: readonly number[]; readonly source: TNodeKey; readonly target: TNodeKey; readonly sourceKey: TNodeKey; readonly targetKey: TNodeKey; readonly sourceIndex: number; readonly targetIndex: number; readonly sourceNode: SankeyEndpointContext; readonly targetNode: SankeyEndpointContext; readonly value: number; } export interface SankeyNode extends SankeyNodeContext { readonly layer: number; readonly x0: number; readonly x1: number; readonly y0: number; readonly y1: number; readonly x: number; readonly y: number; readonly incomingLinks: readonly SankeyLink[]; readonly outgoingLinks: readonly SankeyLink[]; } export interface SankeyLink extends Omit, 'sourceNode' | 'targetNode'> { readonly sourceNode: SankeyNode; readonly targetNode: SankeyNode; readonly width: number; readonly x1: number; readonly y1: number; readonly x2: number; readonly y2: number; } export interface SankeyDiagramContext { readonly id: string; readonly chart: ChartBounds; readonly nodes: readonly SankeyNode[]; readonly links: readonly SankeyLink[]; } export type SankeyNodeComparator = (left: SankeyNodeContext, right: SankeyNodeContext) => number; export type SankeyLinkComparator = (left: SankeyLinkContext, right: SankeyLinkContext) => number; export interface SankeyDiagramOptions, TSource extends TransformValue, TTarget extends TransformValue, TValue extends TransformValue, TMarks extends SankeyMarks> extends ChartMarkMotionOptions> { readonly id?: string; readonly nodes: Iterable; readonly links: Iterable; readonly nodeKey: TNodeKey; readonly source: TSource; readonly target: TTarget; readonly value: TValue; readonly linkKey?: TransformValue; /** Built-in shorthand or D3-compatible node aligner. Defaults to `justify`. */ readonly align?: SankeyAlignment | SankeyNodeAligner>; /** `undefined` lets the layout order nodes; `null` preserves input order. */ readonly nodeSort?: SankeyNodeComparator> | null; /** `undefined` lets the layout order links; `null` preserves input order. */ readonly linkSort?: SankeyLinkComparator> | null; /** Node width in final pixels. Defaults to 24. */ readonly nodeWidth?: SankeyLayoutValue; /** Same-column node separation in final pixels. Defaults to 8. */ readonly nodePadding?: SankeyLayoutValue; /** Final-pixel inset from the resolved plot bounds. Defaults to zero. */ readonly inset?: SankeyLayoutValue; /** Number of relaxation passes. Defaults to D3 Sankey's 6. */ readonly iterations?: number; /** Ordinary marks over immutable final-pixel node and link rows. */ readonly marks: (context: SankeyDiagramContext>) => TMarks; } /** Resolves a proportional flow layout, then composes ordinary pixel marks. */ export declare function sankeyDiagram, const TSource extends TransformValue, const TTarget extends TransformValue, const TValue extends TransformValue, const TMarks extends SankeyMarks>(options: SankeyDiagramOptions): ChartMark, ChartMarkPointX, ChartMarkPointY, never, never>; export {};