import type { JsonSchema } from "@jsonforms/core";
import type { Categorization, Category, ControlElement, LabelElement, Layout, UISchemaElement } from "@jsonforms/core";
import type { PropType } from "vue";
import type { RankedTester } from "@jsonforms/core";
import type { ToolEdge } from "./ToolEdge";
import { ModalControl } from "@/lib/useDialog";
export declare const scalarTypes: string[];
export interface ToolInterface {
    uuid: string;
    propertyName: string;
    isRequired: boolean;
    schema: JsonSchema;
    uischema: JsonFormsUISchema | boolean | any;
    tester: RankedTester | undefined;
    importer: () => any;
    optionDataPrepare: (context: ToolContext) => Record<string, any>;
    optionDataUpdate: (context: ToolContext, data: Record<string, any>) => void;
    optionJsonforms: (context: ToolContext) => Promise<JsonFormsInterface | undefined>;
    /** :TODO add cloneWithSchema(schema,uischema) **/
    clone: () => ToolInterface;
    toolbarOptions: () => Record<string, any>;
    edge: ToolEdge;
    /** @deprecated use edge.childs  **/
    childs: ToolInterface[];
    generateJsonSchema: () => JsonSchema | undefined;
    generateUiSchema: () => JsonFormsUISchema | undefined;
    initChilds: (toolFinder: ToolFinderInterface, baseSchemaTool?: ToolInterface | undefined) => ToolInterface[];
}
export interface ToolContext {
    fb?: any;
    builder?: string;
    schemaOnly?: boolean;
    schemaReadOnly?: boolean;
    rootSchema?: JsonSchema;
    baseSchemaTool?: ToolInterface;
    modalControl?: ModalControl;
    /** @deprecated - Is this needed anywhere?? */
    parentMethod?: string;
}
export interface ToolFinderInterface {
    findLayoutToolByUiType(uiType: string): ToolInterface | undefined;
    findMatchingToolAndClone(schema: JsonSchema, itemSchema: JsonSchema, itemUischema: any, propertyName?: string, fromTools?: ToolInterface[]): ToolInterface;
    findMatchingTool(schema: JsonSchema, itemSchema: JsonSchema, itemUischema: any, fromTools?: ToolInterface[]): ToolInterface;
    findLayoutToolByUiType(uiType: string): ToolInterface | undefined;
    getTypedTools(): TypedTools;
    guessType(schema: JsonSchema): string | undefined;
}
export type TypedTools = {
    control: ToolInterface[];
    layout: ToolInterface[];
};
export interface JsonFormsUISchema extends UISchemaElement, LabelElement, ControlElement, Category, Categorization {
    type: string;
}
export interface JsonFormsInterface {
    schema: JsonSchema;
    uischema: Layout;
}
export declare const toolComponentProps: () => {
    tool: {
        required: true;
        type: PropType<ToolInterface>;
    };
    isToolbar: {
        required: false;
        type: BooleanConstructor;
        default: false;
    };
    isRoot: {
        required: false;
        type: BooleanConstructor;
        default: false;
    };
    isInlineType: {
        required: false;
        type: BooleanConstructor;
        default: false;
    };
    hideActionbar: {
        required: false;
        type: BooleanConstructor;
        default: false;
    };
    prefixLabel: {
        required: false;
        type: StringConstructor;
        default: String;
    };
    propertyName: {
        required: false;
        type: StringConstructor;
        default: String;
    };
};
export declare const formbuilderProps: () => {
    schema: ObjectConstructor;
    jsonForms: ObjectConstructor;
    jsonFormsRenderers: ArrayConstructor;
    schemaOnly: BooleanConstructor;
    schemaReadOnly: BooleanConstructor;
    tools: ArrayConstructor;
    schemaTool: StringConstructor;
    schemaToolProps: ObjectConstructor;
};
export interface formbuilderPropsI {
    schema: JsonSchema;
    uischema: Layout;
    jsonForms: any;
    jsonFormsRenderers: [];
    schemaOnly: boolean;
    schemaReadOnly: boolean;
    tools: ToolInterface[];
    schemaTool: string;
    schemaToolProps: any;
}
/**
 *
 * @see http://sortablejs.github.io/Sortable/#thresholds
 *
 */
export declare const vuedraggableOptions: {
    'item-key': string;
    swapThreshold: number;
    invertSwap: boolean;
    fallbackOnBody: boolean;
    animation: number;
};
