import { Edge, GraphEdge, GraphLabel, graphlib } from 'dagre';
import { BaseNode } from '../core/graph';
import { Hierarchy } from '../core/hierarchy';
import { SafeAny } from './any';
export interface GraphOptions {
    directed?: boolean | undefined;
    multigraph?: boolean | undefined;
    compound?: boolean | undefined;
}
export interface IGraphLabel extends GraphLabel {
    name?: string;
    type?: string | number;
}
export declare enum NodeType {
    META = 0,
    NODE = 1,
    BRIDGE = 2
}
export declare enum InclusionType {
    INCLUDE = 0,
    EXCLUDE = 1,
    UNSPECIFIED = 2
}
export declare enum GraphType {
    META = 0,
    CORE = 1,
    BRIDGE = 2
}
export interface GraphDef {
    nodes: NodeDef[];
}
export interface NodeDef {
    name: SafeAny;
    inputs: NodeInputDef[];
    path: SafeAny[];
    attr?: AttrDef;
    width?: number;
    height?: number;
}
export interface NodeInputDef {
    name: SafeAny;
    attr?: AttrDef;
}
export interface AttrDef {
    [key: string]: SafeAny;
}
export interface BaseEdge {
    w: SafeAny;
    v: SafeAny;
    name?: string;
}
export interface BridgeNode extends Node {
    inbound: boolean;
}
export interface Node {
    name: SafeAny;
    path?: SafeAny[];
    type: NodeType;
    isGroupNode: boolean;
    cardinality: number;
    parentNode: Node;
    include: InclusionType;
    attr: AttrDef;
    width?: number;
    height?: number;
}
export interface MetaNode extends GroupNode {
    depth: number;
    path: SafeAny[];
    getFirstChild(): GroupNode | Node;
    getChildren(): Array<GroupNode | BaseNode>;
    leaves(): SafeAny[];
}
export interface MetaEdge extends Edge, GraphEdge {
    baseEdgeList: BaseEdge[];
    inbound?: boolean;
    addBaseEdge(edge: BaseEdge, h: Hierarchy): void;
}
export interface GroupNode extends Node {
    metaGraph: graphlib.Graph<GroupNode | BaseNode>;
    bridgeGraph: graphlib.Graph<GroupNode | BaseNode>;
}
