import { Connection, ConnectionPoint } from '../workflow-designer.types';
import { WorkflowDesignerState } from '../workflow-designer.state';
import { NodeManagementService } from './node-management.service';
import * as i0 from "@angular/core";
export declare class ConnectionService {
    private state;
    private nodeService;
    private draggingConnectionData;
    private readonly connectionRules;
    constructor(state: WorkflowDesignerState, nodeService: NodeManagementService);
    /**
     * Start a new connection drag operation
     */
    startConnectionDrag(point: ConnectionPoint, swimlaneIndex: number, globalX: number, globalY: number): void;
    /**
     * Update the position of the dragging connection
     */
    updateConnectionDrag(currentX: number, currentY: number): void;
    /**
     * End the current connection drag operation
     */
    endConnectionDrag(): void;
    /**
     * Check if a connection drag is in progress
     */
    isConnectionDragging(): boolean;
    /**
     * Get the current connection path data for rendering
     */
    getConnectionPathData(): {
        startX: number;
        startY: number;
        endX: number;
        endY: number;
        sourceSwimlaneIndex: number;
    } | null;
    /**
     * Create a new connection between nodes
     */
    createConnection(targetNodeId: string, targetPointId: string, targetSwimlaneIndex: number): Connection | null;
    /**
     * Get the path data for rendering a saved connection
     */
    getConnectionData(connection: Connection): {
        startX: number;
        startY: number;
        endX: number;
        endY: number;
        sourceSwimlaneIndex: number;
        targetSwimlaneIndex: number;
    } | null;
    /**
     * Calculate a path for orthogonal connection rendering
     */
    getOrthogonalPath(startX: number, startY: number, endX: number, endY: number, pointType: 'top' | 'right' | 'bottom' | 'left'): string;
    /**
     * Check if a connection is allowed between node types
     */
    canConnect(sourceNodeType: string, targetNodeType: string): boolean;
    /**
     * Get allowed node types for the current dragging connection
     */
    getAllowedTargetNodeTypes(): string[];
    /**
     * Delete a connection by ID
     */
    deleteConnection(connectionId: string): boolean;
    /**
     * Delete all connections associated with a node
     */
    deleteConnectionsForNode(nodeId: string): void;
    /**
     * Get the current connection drag data
     */
    getConnectionDragData(): {
        sourcePoint?: ConnectionPoint;
        sourceSwimlaneIndex?: number;
        startX?: number;
        startY?: number;
        currentX?: number;
        currentY?: number;
    };
    static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ConnectionService>;
}
