import React from "react";
import { FormMode } from "./Utilities/FormDesignConstants";
import { FormConfiguration } from "./FormConfiguration";
import { IAction } from "../CommonUI/IAction";
import { ISampleDataProvider } from "@appglue/common/dist/Common/ISampleDataProvider";
import { IDesignValidationProvider } from "@appglue/common/dist/Common/IDesignValidationProvider";
import { FormContext } from "./Utilities/FormContext";
import { DataDefinition } from "@appglue/common/dist/Common/Data/DataDefinition";
import { SidebarItem } from "../CommonUI/BuilderUI/Sidebar";
import { ExecutionData } from "@appglue/common/dist/Common/Data/ExecutionData/ExecutionData";
import { IDesignPanelConfig } from "@appglue/common/dist/Common/IDesignPanelConfig";
import { UnitTestConfiguration } from "@appglue/common/dist/Common/UnitTesting/UnitTestConfiguration";
interface XFormDesignerProps {
    form: FormConfiguration;
    formData?: ExecutionData;
    formName?: string;
    dataDefinition?: DataDefinition | (() => DataDefinition);
    onFormClose?: () => void;
    onFormSave?: (data: any) => void;
    onFormNameUpdate?: (title: string) => void;
    sampleDataProvider?: ISampleDataProvider;
    topDesignerExtensions?: IAction[];
    bottomDesignerExtensions?: IAction[];
    designConfig?: IDesignPanelConfig;
    designValidationProvider?: IDesignValidationProvider;
    initialMode?: FormMode;
    saveUnitTest?: (unitTest: UnitTestConfiguration) => void;
    getUnitTests?: () => Promise<UnitTestConfiguration[]>;
}
export declare class FormBuilder extends React.Component<XFormDesignerProps, {
    mode: FormMode | string;
    isJsonEditing: boolean;
    nextMode: FormMode | string;
}> {
    formName: string;
    editContext: FormContext;
    tabs: SidebarItem[];
    designConfig: IDesignPanelConfig;
    runtimeConfig: IDesignPanelConfig;
    constructor(props: XFormDesignerProps);
    componentDidUpdate(prevProps: XFormDesignerProps): void;
    setupProps(props: XFormDesignerProps): FormContext;
    getDefaultTabs(): SidebarItem[];
    onFormSave(): void;
    onFormClose(): void;
    onCopy(): void;
    onCut(): void;
    onDelete(): void;
    getDefaultDesignConfig(): IDesignPanelConfig;
    getDefaultRuntimeConfig(): IDesignPanelConfig;
    getDefaultData(form: FormConfiguration): {
        [p: string]: any;
    };
    handleModeChange(mode: string): void;
    onJsonEditing: (isJsonEditing: boolean) => void;
    onNextMode: (isLeaving: boolean) => void;
    onChangeSampleData(value: string): void;
    onUpdateDisplayMode(value: string): void;
    onChangeFormName(newTitle: string): void;
    render(): JSX.Element;
}
export {};
