import React from "react";
import { FlowConfiguration } from "@appglue/common/dist/Flow/FlowConfiguration";
import { BeforeCapture, DragStart, DragUpdate, DropResult } from "react-beautiful-dnd";
import { FlowEditContext } from "./FlowEditContext";
import { SidebarItem } from "../CommonUI/BuilderUI/Sidebar";
import { DataDefinition } from "@appglue/common/dist/Common/Data/DataDefinition";
import { IPosition } from "./Builder/Common/IPosition";
import { UnitTestConfiguration } from "@appglue/common/dist/Common/UnitTesting/UnitTestConfiguration";
export interface FlowEditorParameters {
    flow: FlowConfiguration;
    flowEditContext?: FlowEditContext;
    flowStartDataDefinition?: DataDefinition;
    flowName?: string;
    onFlowNameUpdate?: (newName: string) => void;
    viewAPIUrl?: string;
    onFlowSave?: () => void;
    onFlowCancel?: () => void;
    saveUnitTest?: (unitTest: UnitTestConfiguration) => void;
    getUnitTests?: () => Promise<UnitTestConfiguration[]>;
}
export declare class FlowBuilder extends React.Component<FlowEditorParameters, {}> {
    editContext: FlowEditContext;
    mousePosition: IPosition;
    constructor(props: FlowEditorParameters);
    get flow(): FlowConfiguration;
    onMouseMove: (event: MouseEvent) => void;
    componentWillUnmount(): void;
    getDefaultTabs(): SidebarItem[];
    onChangeFlowName(newName: string): void;
    render(): JSX.Element;
    onBeforeCapture(before: BeforeCapture): void;
    onBeforeDragStart(initial: DragStart): void;
    onDragUpdate(initial: DragUpdate): void;
    onDragEnd(result: DropResult): void;
}
