///
import * as CSS from 'csstype';
import { ValueCache } from './valuecache';
export declare type ReportSize = (width: number, height: number) => void;
export declare type Size = {
width: number;
height: number;
};
export declare type Dimensions = {
x: number;
y: number;
width: number;
height: number;
};
export declare type Point = {
x: number;
y: number;
};
export declare type RecursivePartial = {
[P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial[] : T[P] extends object ? RecursivePartial : T[P];
};
export declare type ShapeComponentProps = {
node: NodeOptions;
innerSize: Size;
};
export declare type CustomNodeLabelProps = {
node: NodeOptions;
};
export declare type MarkerProps = {
edgeMeta: EdgeOptions;
markerId: string;
};
export declare type ShapesDefinition = {
[key: string]: ShapeDefinition;
};
export declare type NodeLabelDefinition = {
renderer: React.FC;
html: boolean;
};
export declare type CustomEdgeLabelProps = {
edgeMeta: EdgeOptions;
};
export declare type NodeLabelsDefinition = {
[key: string]: NodeLabelDefinition;
};
export declare type EdgeLabelDefinition = {
renderer: React.FC;
html: boolean;
};
export declare type MarkerComponent = React.FC;
export declare type MarkerComponents = {
[key: string]: MarkerComponent;
};
export declare type PathGenerator = (points: Array) => string;
export declare type PathGeneratorTypes = {
[key: string]: PathGenerator;
};
export declare type EdgeLabelsDefinition = {
[key: string]: EdgeLabelDefinition;
};
export declare type ShapeDefinition = {
renderer: React.FC;
intersection: (node: NodeOptions, point: Point, valueCache: ValueCache) => Point;
};
export declare enum LayoutType {
Dagre = 1,
D3Dag = 2
}
export declare type DAGReactProps = DAGReactGeneralProps & DAGReactGraphLayoutProps;
export interface DAGReactGeneralProps {
customShapes: ShapesDefinition;
customNodeLabels: NodeLabelsDefinition;
customEdgeLabels: EdgeLabelsDefinition;
customPathGenerators: PathGeneratorTypes;
customMarkerComponents: MarkerComponents;
defaultNodeConfig: RecursivePartial;
defaultEdgeConfig: RecursivePartial;
nodes: Array>;
edges: Array>;
graphLayoutStarted: () => void;
graphLayoutComplete: (width?: number, height?: number) => void;
stage: number;
layoutStage: number;
renderNode?: (node: NodeOptions, reportSize: ReportSize, valueCache: ValueCache, layoutStage: number) => React.ReactElement;
renderEdge?: (index: number, edgeMeta: EdgeOptions) => React.ReactElement;
renderEdgeLabel?: (index: number, edgeMeta: EdgeOptions, reportSize: ReportSize) => React.ReactElement;
renderingOrder: Array;
graphOptions: {
[key: string]: any;
};
}
export interface DAGReactGraphLayoutProps {
graphLayout: GraphLayout;
}
export interface GraphLayout {
nodes: Array;
edges: Array;
dirty: boolean;
setGraphLabelOptions(options: {
[key: string]: any;
}): void;
setGraphData(nodesIn: Array>, edgesIn: Array>, userDefaultNodeConfig: RecursivePartial, userDefaultEdgeConfig: RecursivePartial): void;
scheduleLayout(): void;
layout(): Promise | undefined;
layoutIfSized(): boolean;
graphSize(): Size;
graphNodeById(id: string): NodeOptions | undefined;
setEdgeLabelSize(index: number, width: number, height: number): void;
setNodeSize(index: number, width: number, height: number): void;
}
export interface LayoutDagreConstructorOptions {
multigraph: boolean;
}
export interface NodeOptions {
id: string;
label: string;
shape: string;
labelType: string;
styles: {
node: {
className?: string;
padding: {
top: number;
bottom: number;
left: number;
right: number;
};
};
shape: {
className?: string;
styles?: CSS.Properties;
cornerRadius?: number;
};
label: {
className?: string;
styles?: CSS.Properties;
};
};
width?: number;
height?: number;
x?: number;
y?: number;
meta: {
[key: string]: any;
};
}
export interface EdgeOptions {
from: string;
to: string;
name?: string;
label?: string;
labelPos: 'l' | 'r' | 'c';
labelOffset: number;
labelType: string;
markerType: string;
pathType: string;
points?: Array;
path?: string;
width?: number;
height?: number;
x?: number;
y?: number;
styles: {
label: {
className: string;
styles: CSS.Properties;
};
edge: {
className: string;
styles: CSS.Properties;
};
marker: {
className: string;
styles: CSS.Properties;
};
};
meta: {
[key: string]: any;
};
}
export declare type RenderingOrderMapping = {
nodes: React.ReactElement[];
edges: React.ReactElement[];
edgeLabels: React.ReactElement[];
};