import type { ChartMeta } from 'chart.js';
import type Flow from './flow.js';
import type { AnyObject, SankeyControllerDatasetOptions, SankeyParsedData } from './types.js';
import { DatasetController } from 'chart.js';
export default class SankeyController extends DatasetController {
    static readonly id = "sankey";
    static readonly descriptors: {
        _indexable: boolean;
        _scriptable: boolean;
        nodeLabels: {
            _indexable: boolean;
            _scriptable: boolean;
        };
    };
    static readonly defaults: {
        animations: {
            colors: {
                properties: string[];
                type: string;
            };
            numbers: {
                properties: string[];
                type: string;
            };
            progress: {
                delay: (ctx: any) => number | undefined;
                duration: (ctx: any) => number | undefined;
                easing: string;
            };
        };
        borderColor: string;
        borderWidth: number;
        color: string;
        dataElementType: string;
        modeX: string;
        nodePadding: number;
        nodeWidth: number;
        orientation: string;
        transitions: {
            hide: {
                animations: {
                    colors: {
                        properties: string[];
                        to: string;
                        type: string;
                    };
                };
            };
            show: {
                animations: {
                    colors: {
                        from: string;
                        properties: string[];
                        type: string;
                    };
                };
            };
        };
    };
    static readonly overrides: {
        datasets: {
            clip: boolean;
            parsing: {
                flow: string;
                from: string;
                to: string;
            };
        };
        interaction: {
            intersect: boolean;
            mode: string;
        };
        layout: {
            padding: {
                bottom: number;
                left: number;
                right: number;
                top: number;
            };
        };
        plugins: {
            legend: {
                display: boolean;
            };
            tooltip: {
                callbacks: {
                    label(context: any): string;
                    title(): string;
                };
            };
        };
        scales: {
            x: {
                bounds: string;
                display: boolean;
                min: number;
                offset: boolean;
                type: string;
            };
            y: {
                bounds: string;
                display: boolean;
                min: number;
                offset: boolean;
                reverse: boolean;
                type: string;
            };
        };
    };
    options: SankeyControllerDatasetOptions;
    private _nodes;
    private _maxX;
    private _maxY;
    parseObjectData(meta: ChartMeta<'sankey', Flow>, data: AnyObject[], start: number, count: number): SankeyParsedData[];
    getMinMax(scale: any): {
        max: number;
        min: number;
    };
    update(mode: any): void;
    updateElements(elems: Flow[], start: number, count: number, mode: 'default' | 'resize' | 'reset' | 'none' | 'hide' | 'show' | 'active'): void;
    private _drawLabels;
    private _drawNodes;
    /**
     * That's where the drawing process happens
     */
    draw(): void;
}
