/// <reference types="react" />
import { BaseFlowStep } from "../Steps/BaseFlowStep";
import { FlowStepSequence } from "./FlowStepSequence";
import { IFlowElement } from "./IFlowElement";
import { FlowStepOutputInstructions } from "./FlowStepOutputInstructions";
import { FlowEditContext } from "../FlowEditContext";
import { XExecutionData } from "../../Common/Data/ExecutionData/XExecutionData";
import { XDataDefinition } from "../../Common/Data/XDataDefinition";
import { CandidateSequence } from "./CandidateSequence";
import { IFlowStepSequence } from "./IFlowStepSequence";
import { ITestingContext } from "../../Common/Testing/ITestingContext";
import { MultiExecutable, MultiExecutableOutputDefinition, XPromise } from "../../Common/Execution/MultiExecutable";
export declare class FlowConnection {
    fromSequence: FlowStepSequence;
    toSequence?: FlowStepSequence;
    fromInstruction: FlowStepOutputInstructions;
    fromStep: BaseFlowStep;
    fromId: string;
    toId: string;
    isCandidate: boolean;
    constructor(fromId: string, toId: string, isCandidate: boolean, fromSequence: FlowStepSequence, fromInstruction: FlowStepOutputInstructions, fromStep: BaseFlowStep);
}
export declare class FlowExtraConnection {
    fromId: string;
    toId: string;
    fromStep: BaseFlowStep;
    fromInstruction: FlowStepOutputInstructions;
    constructor(fromId: string, toId: string, fromStep: BaseFlowStep, fromInstruction: FlowStepOutputInstructions);
}
export declare class XFlowConfiguration extends MultiExecutable implements IFlowElement {
    _id: string;
    private _sequences;
    errorSequence: FlowStepSequence;
    endSequence: FlowStepSequence;
    declaredDataDefinition?: XDataDefinition;
    context?: FlowEditContext;
    visibleSteps: string[];
    favoriteSteps: string[];
    constructor();
    get sequences(): readonly FlowStepSequence[];
    toggleShowDescription(show: boolean): void;
    toggleCollapsed(isCollapsed: boolean): void;
    find(id: string): IFlowElement | null;
    findSequenceByStepId(stepId: string): FlowStepSequence | null;
    add(step: BaseFlowStep, seq: string | FlowStepSequence, index?: number): void;
    addStepToCandidate(step: BaseFlowStep, candidate: CandidateSequence): void;
    moveStepToCandidate(step: BaseFlowStep, sequence: FlowStepSequence, candidate: CandidateSequence): void;
    remove(step: BaseFlowStep, sequenceId?: string): void;
    moveInSequence(step: BaseFlowStep, sequence: string, index: number): void;
    canMoveToSequence(step: BaseFlowStep, toSequence: IFlowStepSequence): boolean;
    moveToSequence(step: BaseFlowStep, fromSequence: string | FlowStepSequence, toSequence: string | FlowStepSequence, index?: number): void;
    getSequence(id: string): FlowStepSequence | null;
    renderEditUI(): JSX.Element | null;
    addSequence(newSeq: FlowStepSequence): void;
    deleteSequenceByIndex(idx: number): void;
    getAlternateOutputPaths(): FlowStepOutputInstructions[];
    getConnections(): FlowConnection[];
    getEndFlowConnections(): FlowExtraConnection[];
    getErrorFlowConnections(): FlowExtraConnection[];
    getUpstreamSequences(s: FlowStepSequence): IFlowStepSequence[];
    getUpstreamSequencesFromStep(step: BaseFlowStep): IFlowStepSequence[];
    canLink(start: FlowStepSequence, end: FlowStepSequence): boolean;
    isDraggingOverSequence(sequence: FlowStepSequence): boolean;
    getOutcomes(): MultiExecutableOutputDefinition[];
    run(data: XExecutionData, testContext: ITestingContext | undefined): XPromise;
}
