/** Où accrocher les flux d'un nœud dont les entrées et sorties ne s'équilibrent pas. */ export type Type_SmAttachIncompletes = 'leading' | 'nearest' | 'trailing'; export interface SmLayoutConfig { width: number; height: number; nodeWidth: number; /** node_h / 100 — 0 = « espacer au maximum », 1 = « aucun espacement ». */ nodeHeightFactor: number; /** node_spacing / 100 — fraction de l'espacement maximal réellement appliquée. */ nodeSpacingFactor: number; /** Force les nœuds sans entrée dans l'étage 0. */ leftJustifyOrigins: boolean; /** Force les nœuds sans sortie dans le dernier étage. */ rightJustifyEndpoints: boolean; /** `layout order automatic` (sinon : ordre exact des lignes source). */ autoLayout: boolean; attachIncompletesTo: Type_SmAttachIncompletes; iterations: number; } export interface SmLayoutNode { index: number; name: string; sourceRow: number; isAShadow: boolean; stage: number; value: number; totalIn: number; totalOut: number; flowsIn: SmLayoutFlow[]; flowsOut: SmLayoutFlow[]; x: number; y: number; dx: number; dy: number; } export interface SmLayoutFlow { index: number; source: SmLayoutNode; target: SmLayoutNode; value: number; sourceRow: number; isAShadow: boolean; hasAShadow: boolean; /** Index du flux réel dont celui-ci est l'ombre (-1 si ce n'est pas une ombre). */ shadowOf: number; useForVisiblePlacing: boolean; weightedValue: number; /** Nombre d'étages traversés (target.stage - source.stage). */ ds: number; dx: number; dy: number; /** Décalage vertical du flux sous le bord haut de son nœud source. */ sy: number; /** Décalage vertical du flux sous le bord haut de son nœud cible. */ ty: number; } export interface SmLayoutInput { /** Dans l'ordre d'apparition dans la source. */ nodes: { name: string; sourceRow: number; }[]; /** `source` / `target` = index dans `nodes`. */ flows: { source: number; target: number; value: number; sourceRow: number; }[]; } export interface SmLayoutResult { /** Nœuds fantômes inclus — les filtrer sur `isAShadow` pour n'obtenir que les vrais. */ nodes: SmLayoutNode[]; flows: SmLayoutFlow[]; stages: SmLayoutNode[][]; /** Facteur d'échelle valeur -> pixels : hauteur d'un nœud = value * ky. */ ky: number; } /** * Calcule le placement SankeyMATIC d'un graphe de flux. * * Les nœuds fantômes créés pour les flux traversant plusieurs étages sont * présents dans le résultat (`isAShadow`) : ils portent la réservation d'espace * vertical, mais ne doivent pas être rendus. */ export declare const computeSankeymaticLayout: (input: SmLayoutInput, cfg: SmLayoutConfig) => SmLayoutResult;