import React from 'react';
import type { IExecution, IPipeline } from '../../../domain';
import type { IExecutionViewState, IPipelineGraphNode } from './pipelineGraph.service';
import './pipelineGraph.less';
export interface IPipelineGraphProps {
    execution?: IExecution;
    onNodeClick: (node: IPipelineGraphNode, subIndex?: number) => void;
    pipeline?: IPipeline;
    shouldValidate?: boolean;
    viewState: IExecutionViewState;
}
export interface IPipelineGraphState {
    allNodes: IPipelineGraphNode[];
    graphHeight: number;
    graphWidth: string;
    labelOffsetX: number;
    labelOffsetY: number;
    maxLabelWidth: number;
    nodeRadius: number;
    phaseCount: number;
    rowHeights: number[];
    showGraph: boolean;
    loading: boolean;
}
export declare class PipelineGraph extends React.Component<IPipelineGraphProps, IPipelineGraphState> {
    private defaultNodeRadius;
    private defaultState;
    private element;
    private graphStatusHash;
    private graphVerticalPadding;
    private minExecutionGraphHeight;
    private minLabelWidth;
    private pipelineValidations;
    private rowPadding;
    private validationSubscription;
    private windowResize;
    private expandPipelineStageThreshold;
    constructor(props: IPipelineGraphProps);
    private highlight;
    private handleWindowResize;
    private handleWheel;
    /**
     * Used to draw inverse bezier curve between stages
     */
    private curvedLink;
    private getLastPhase;
    private collect;
    private createNodes;
    /**
     * Sets phases and adds children/parents to nodes
     * Probably blows the stack if circular dependencies exist, maybe not
     */
    private applyPhasesAndLink;
    private fixOverlaps;
    private createPlaceholderNode;
    /**
     * Sets the width of the graph and determines the width available for each label
     */
    private applyPhaseWidth;
    private applyNodeHeights;
    private setNodePositions;
    private createLinks;
    private linkNodes;
    private applyAllNodes;
    private establishRowHeights;
    private updateGraph;
    handleExpandSectionClick(): void;
    private resetLinks;
    componentDidMount(): void;
    private refCallback;
    private validatePipeline;
    componentWillReceiveProps(nextProps: IPipelineGraphProps): void;
    componentDidUpdate(_prevProps: IPipelineGraphProps, prevState: IPipelineGraphState): void;
    componentWillUnmount(): void;
    render(): JSX.Element;
}
