/// <reference types="react" />
import { CSSProperties } from "@material-ui/styles";
import { Direction } from "react-beautiful-dnd";
import { xarrowPropsType } from "@appglue/xarrow/lib";
import { IInjectTopItem } from "../../../CommonUI/BuildUI/Topbar";
import { FlowEditContext } from "../../FlowEditContext";
import { BaseFlowStep } from "../../Steps/BaseFlowStep";
import { FlowStepOutputInstructions } from "../FlowStepOutputInstructions";
import { FlowStepSequence, FlowStepSequenceStrategy } from "../FlowStepSequence";
import { IFlowElement } from "../IFlowElement";
import { IFlowStepSequence } from "../IFlowStepSequence";
import { FlowConnection } from "../XFlowConfiguration";
interface ISize {
    width: number;
    height?: number;
}
export interface IFlowDisplayBehavior {
    readonly sequenceOuterPadding: string;
    readonly linePathType: "smooth" | "grid" | "straight";
    readonly lineLabelPosition: "start" | "middle" | "end";
    readonly isEnableContextMenu: boolean;
    getShowTopItems(): IInjectTopItem;
    renderStepStrategy(): JSX.Element;
    onSelectStepStrategyConnect(element: HTMLElement, step: BaseFlowStep): void;
    getLines(): ILine[];
    getSequenceMainSize(sequence: FlowStepSequence): ISize;
    getSequenceRealSize(sequence: FlowStepSequence): ISize;
    getSequenceExtraSize(sequence: FlowStepSequence): ISize;
    getSequenceTitleStyle(sequence: FlowStepSequence): CSSProperties;
    getEmptySequenceStyle(sequence: FlowStepSequence): CSSProperties;
    getSequenceBackgroundColor(sequence: FlowStepSequence): string;
    getSequenceBorderColor(sequence: FlowStepSequence): string;
    getSequenceStepsForPaths(sequence: FlowStepSequence): readonly BaseFlowStep[];
    getPathsForStep(step: BaseFlowStep): FlowStepOutputInstructions[];
    getSequenceInstructions(sequence: FlowStepSequence): readonly FlowStepOutputInstructions[];
    setCandidateDesiredPositionForStepStrategy(instruction: FlowStepOutputInstructions): void;
    setCandidateDesiredPositionForSeqeuence(seq: FlowStepSequence): void;
    isCollapsed(sequence: FlowStepSequence): boolean;
    toggleIsCollapsed(event: React.MouseEvent<HTMLElement>, sequence: FlowStepSequence): void;
    setIsCollapsed(sequence: FlowStepSequence, isCollapsed: boolean): void;
    getInitialSequenceStrategy(): FlowStepSequenceStrategy;
    isEnabledPlaceholderWhileDrop(sequence: FlowStepSequence): boolean;
    addStepToSequence(seq: FlowStepSequence, step: BaseFlowStep, index?: number): void;
    moveStepToSequence(step: BaseFlowStep, fromSeq: FlowStepSequence, toSeq: FlowStepSequence, index?: number): void;
    clearSelection(): void;
    onSetSelection(sequence: FlowStepSequence): void;
    renderSequenceContent(sequence: FlowStepSequence): JSX.Element | null;
    renderSequenceActions(sequence: FlowStepSequence): JSX.Element | null;
    renderSequenceStrategy(sequence: FlowStepSequence): JSX.Element | null;
    renderSequenceTitle(sequence: FlowStepSequence): JSX.Element | null;
    getCandidateCommonStyles(): {
        width: number;
        height: number;
        padding: string;
        fontSize: number;
        dragging: {
            width: number;
            height: number;
        };
    };
    isShowStepConnection(step: BaseFlowStep): boolean;
    getSequenceDroppableDirection(sequence: FlowStepSequence): Direction;
    renderExtraContents(editContext: FlowEditContext): JSX.Element | null;
    renderEditUI(elem: IFlowElement | undefined | null): JSX.Element | null;
}
export interface ILine {
    value: FlowConnection;
    arrow: xarrowPropsType;
    targetSequence: IFlowStepSequence | undefined;
    labels: {
        value: FlowConnection;
        label: JSX.Element;
        isFlowConnection: boolean;
    }[];
}
export {};
