import { ISize, SVGGlowFilter, SVGZoomWidget, Widget } from "@hpcc-js/common";
import "d3-transition";
import { Edge } from "./Edge.ts";
import * as GraphLayouts from "./GraphLayouts.ts";
import { Subgraph } from "./Subgraph.ts";
import { Vertex } from "./Vertex.ts";
import "./Graph.css";
export interface Lineage {
    parent: Widget;
    child: Widget;
}
export interface IGraphData {
    subgraphs?: Widget[];
    vertices: Widget[];
    edges: Edge[];
    hierarchy?: Lineage[];
}
export type GraphLayoutType = "Hierarchy" | "DOT" | "ForceDirected" | "ForceDirected2" | "Neato" | "FDP" | "Circle" | "TwoPI" | "Circo" | "None";
export declare class Graph extends SVGZoomWidget {
    static Subgraph: typeof Subgraph;
    static Vertex: typeof Vertex;
    static Edge: typeof Edge;
    private _toggleHierarchy;
    private _toggleForceDirected;
    private _toggleForceDirected2;
    private _toggleCircle;
    private _graphData;
    protected highlight: any;
    protected _selection: any;
    protected _dragging: any;
    protected forceLayout: any;
    protected _d3Drag: any;
    protected defs: any;
    protected _centroidFilter: SVGGlowFilter;
    protected svgFragment: any;
    protected svg: any;
    protected svgC: any;
    protected svgE: any;
    protected svgV: any;
    constructor();
    iconBarButtons(): Widget[];
    layoutClick(layout: GraphLayoutType): void;
    getOffsetPos(): {
        x: number;
        y: number;
    };
    size(): ISize;
    size(_: any): this;
    clear(): void;
    _dataHash: number;
    data(): IGraphData;
    data(_: IGraphData, merge?: boolean): this;
    graphData(): any;
    selection(_: Widget[]): this;
    selection(): Widget[];
    private _linkcolor;
    linkcolor_default(): string;
    linkcolor_default(_: string): this;
    private _linktooltip;
    linktooltip_default(): string;
    linktooltip_default(_: string): this;
    private _neighborOffsets;
    dragstart(d: any): void;
    dragging(d: any): void;
    dragend(d: any): void;
    enter(domNode: any, element: any): void;
    getBounds(items: any, layoutEngine?: any): any[][];
    getVertexBounds(layoutEngine: any): any[][];
    getSelectionBounds(layoutEngine: any): any[][];
    centerOnItem(item: Widget): void;
    zoomToItem(item: Widget): void;
    updateVertices(rootElement: any, rootSuffix: any, data: any): void;
    update(domNode: any, element: any): void;
    exit(domNode: any, element: any): void;
    static profileID: number;
    render(callback?: (w: Widget) => void): this;
    _prevLayout: any;
    _prevDataHash: any;
    doLayout(transitionDuration?: number): Promise<void>;
    _doLayout(transitionDuration?: number): Promise<void>;
    getLayoutEngine(): GraphLayouts.Circle | GraphLayouts.ForceDirected | GraphLayouts.Hierarchy;
    getNeighborMap(vertex: any): {
        vertices: {};
        edges: {};
    };
    highlightVerticies(vertexMap?: {
        [id: string]: boolean;
    }): this;
    highlightEdges(edgeMap: any): this;
    highlightVertex(_element: any, d: any): void;
    highlightEdge(_element: any, d: any): void;
    refreshIncidentEdges(d: any, skipPushMarkers: any): void;
    centroids(): Vertex[];
    selectionChanged(): void;
    vertex_click(_row: any, _col: any, _sel: any, more: any): void;
    vertex_dblclick(_row: any, _col: any, _sel: any, _opts: any): void;
    vertex_contextmenu(_row: any, _col: any, _sel: any, _opts: any): void;
    vertex_mouseover(element: any, d: any): void;
    vertex_mouseout(_element: any, _d: any): void;
    edge_mouseover(element: any, d: any): void;
    edge_mouseout(_element: any, _d: any): void;
    addMarkers(clearFirst?: boolean): void;
    progress(what: "start" | "end" | "layout-start" | "layout-tick" | "layout-end"): void;
}
export interface Graph {
    allowDragging(): boolean;
    allowDragging(_: boolean): this;
    dragSingleNeighbors(): boolean;
    dragSingleNeighbors(_: boolean): this;
    layout(): GraphLayoutType;
    layout(_: GraphLayoutType): this;
    applyScaleOnLayout(): boolean;
    applyScaleOnLayout(_: boolean): this;
    highlightOnMouseOverVertex(): boolean;
    highlightOnMouseOverVertex(_: boolean): this;
    highlightOnMouseOverEdge(): boolean;
    highlightOnMouseOverEdge(_: boolean): this;
    transitionDuration(): number;
    transitionDuration(_: number): this;
    showEdges(): boolean;
    showEdges(_: boolean): this;
    snapToGrid(): number;
    snapToGrid(_: number): this;
    selectionClearOnBackgroundClick(): boolean;
    selectionClearOnBackgroundClick(_: boolean): this;
    centroidColor(): string;
    centroidColor(_: string): this;
    highlightSelectedPathToCentroid(): boolean;
    highlightSelectedPathToCentroid(_: boolean): this;
    hierarchyRankDirection(): string;
    hierarchyRankDirection(_: string): this;
    hierarchyNodeSeparation(): number;
    hierarchyNodeSeparation(_: number): this;
    hierarchyEdgeSeparation(): number;
    hierarchyEdgeSeparation(_: number): this;
    hierarchyRankSeparation(): number;
    hierarchyRankSeparation(_: number): this;
    hierarchyDigraph(): boolean;
    hierarchyDigraph(_: boolean): this;
    forceDirectedLinkDistance(): number;
    forceDirectedLinkDistance(_: number): this;
    forceDirectedLinkStrength(): number;
    forceDirectedLinkStrength(_: number): this;
    forceDirectedFriction(): number;
    forceDirectedFriction(_: number): this;
    forceDirectedCharge(): number;
    forceDirectedCharge(_: number): this;
    forceDirectedChargeDistance(): number;
    forceDirectedChargeDistance(_: number): this;
    forceDirectedTheta(): number;
    forceDirectedTheta(_: number): this;
    forceDirectedGravity(): number;
    forceDirectedGravity(_: number): this;
    edge_click(_row: any, _col: any, _sel: any, _more: any): void;
    edge_dblclick(_row: any, _col: any, _sel: any, _more: any): void;
    tooltip: any;
    tooltipHTML(_: any): string;
    tooltipFormat(_: any): string;
}
