/// 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[]; };