import { AfterViewInit } from '@angular/core';
import { BaseLayoutBehavior } from "./base-layout-behavior";
import { MatDialog, MatSelect, MatSelectChange } from "@angular/material";
import { SchemaFunction, SchemaFunctionDefinition, ForgeJSONSchema } from '@lowcodeunit/core';
import { FlowTableComponent } from "../flow-table";
import { jsPlumbToolkitComponent } from '../../svc/jsplumbtoolkit-angular';
export declare class ModuleSchemaLayoutBehavior extends BaseLayoutBehavior implements AfterViewInit {
    dialog: MatDialog;
    protected schemaSavedCallback: Function;
    protected closeModalCallback: Function;
    CurrentModuleConnection: any;
    IncommingSchemaCount: number;
    IncommingModules: any[];
    OutgoingSchemaCount: number;
    FlowID: string;
    ModuleName: string;
    OutgoingModules: any[];
    ParentCTX: any;
    SingleSchemaInput: boolean;
    SingleSchemaOutput: boolean;
    SchemaOptions: MatSelect;
    SchemaOptionsVisible: boolean;
    AvailableSchemaFunctions: SchemaFunctionDefinition[];
    Schemas: ForgeJSONSchema[];
    SchemaFlow: any;
    ToolkitComponent: jsPlumbToolkitComponent;
    constructor(dialog: MatDialog);
    ngAfterViewInit(): void;
    AddNode(schemaType: string): void;
    AfterViewInit(registerDroppables: boolean, droppablesParent: string, droppablesSelector: string): void;
    BeforeConnect(ctx: ModuleSchemaLayoutBehavior, source: any, target: any, edgeData: any, repressErrors: boolean): boolean;
    BeforeStartConnect(ctx: ModuleSchemaLayoutBehavior, node: any, edgeType: string, listExistingModuleTypes: Function, listModuleOptions: Function): boolean;
    BeforeStartDetach(ctx: ModuleSchemaLayoutBehavior, endpoint: any, source: any, sourceId: any, connection: any): boolean;
    ConfigureRelationships(ev: any, ctx: ModuleSchemaLayoutBehavior, nodeId: string): void;
    ConfigureSchema(ev: any, ctx: ModuleSchemaLayoutBehavior, data: any): void;
    ConfigureFilters(ev: any, ctx: ModuleSchemaLayoutBehavior, data: any): void;
    ConfigureGroups(ev: any, ctx: ModuleSchemaLayoutBehavior, nodeId: any): void;
    ConnectionClick(ctx: ModuleSchemaLayoutBehavior, params: any): void;
    DeleteSchema(ev: any, ctx: ModuleSchemaLayoutBehavior, data: any): void;
    EdgeAdded(ctx: ModuleSchemaLayoutBehavior, params: any): void;
    EdgeMoved(ctx: ModuleSchemaLayoutBehavior, edge: any, oldTarget: any, newTarget: any): void;
    ExportFlow(): any;
    HideSchemaOptions(): void;
    MapExistingFlow(schemaFlow: any, schemas: ForgeJSONSchema[], availableSchemaFunctions: SchemaFunctionDefinition[], incommingModules: any[], outgoingModules: any[], flowId: string, moduleName: any): void;
    NodeFactory(ctx: ModuleSchemaLayoutBehavior, type: string, data: any, callback: Function): void;
    NodeResolver(typeId: string): typeof FlowTableComponent;
    PropertyAdded(ctx: ModuleSchemaLayoutBehavior, schema: ForgeJSONSchema): void;
    PropertyTypeChanged(ctx: ModuleSchemaLayoutBehavior, schema: ForgeJSONSchema, propertyId: string): void;
    PropertyDeleted(ctx: ModuleSchemaLayoutBehavior, schema: ForgeJSONSchema): void;
    RemoveEdge(ctx: ModuleSchemaLayoutBehavior, edge: any): void;
    SchemaChanged(schema: ForgeJSONSchema): void;
    SchemaSelected(ev: MatSelectChange): void;
    SetSchemaSavedCallback(parentCTX: any, callback: Function): void;
    SetCloseModalCallback(parentCTX: any, callback: Function): void;
    ShowSchemaOptions(ev: Event): void;
    protected addColumn(ctx: ModuleSchemaLayoutBehavior, nodeId: string, columnId: string, name: string, type: string): void;
    protected flattenSchemaProperties(schema: ForgeJSONSchema): any[];
    protected getFullPropertyName(schema: ForgeJSONSchema, id: string): any[];
    protected getLowestNodePointBySchemaType(schemaType: string): number;
    protected getPortConnectionSourceNodeIds(ctx: ModuleSchemaLayoutBehavior, port: any): any[];
    protected isJoinFunctionNeeded(edge: any, deletedEdge: any): boolean;
    protected isJoinPresent(node: any): boolean;
    protected isGroupNeeded(isGroupNeeded: Function, node: any, currentFunction: any, currentFunctionPort: any): any[];
    protected isMappingFunctionNeeded(edge: any, deleted: boolean): boolean;
    protected mapPortsFromNodeSchemaToAdd(ctx: ModuleSchemaLayoutBehavior, nodeId: string, schema: ForgeJSONSchema): void;
    protected mapPortsFromNodeSchemaToRemove(ctx: ModuleSchemaLayoutBehavior, nodeId: string, schema: ForgeJSONSchema): void;
    protected processIncommingConnections(self: ModuleSchemaLayoutBehavior): void;
    protected removeColumn(ctx: ModuleSchemaLayoutBehavior, nodeId: string, columnId: string): void;
    protected auditFunctions(propertyId: string, functionsNode: any, triggerNode: any, deletedEdge: any, auditFunctionsRecursive: Function, isMappingFunctionNeeded: Function, isJoinFunctionNeeded: Function, isJoinPresent: Function, isGroupNeeded: Function): void;
    protected auditFunctionsRecursive(id: string, functionsNode: any, triggerNode: any, deletedEdge: any, auditFunctionsRecursive: Function, isMappingFunctionNeeded: Function, isJoinFunctionNeeded: Function, isJoinPresent: any, functions: SchemaFunction[], ctx: any): SchemaFunction[];
    protected registerFlowModuleCanvasEvents(node: any, self: ModuleSchemaLayoutBehavior, force: boolean): void;
    protected registerFlowModuleToolkitEvents(self: ModuleSchemaLayoutBehavior): void;
    protected schemaEditorClosed(ctx: ModuleSchemaLayoutBehavior, result: any, data: any, callback: Function, nodeId: string): void;
    protected remapUsedSchema(ctx: ModuleSchemaLayoutBehavior, schema: ForgeJSONSchema, inSchema: ForgeJSONSchema, nodeId: any): void;
    protected setCanvasHeight(): void;
    protected showEdgeSetupModals(ctx: ModuleSchemaLayoutBehavior, edge: any): void;
    protected showJoinEditor(ctx: ModuleSchemaLayoutBehavior, sourceNodeIds: any[], targetNodeId: any, showFunctoinEditorNext: boolean, targetPort: any): void;
    protected showFunctionEditor(ctx: ModuleSchemaLayoutBehavior, sourceNodeIds: string[], targetPort: any): void;
    protected showWhereFunctionEditor(ctx: ModuleSchemaLayoutBehavior, nodeId: string): void;
}
