import type { App } from '../App'; import type { Node } from '../Node'; import { Line, Polyline } from '../shapes/index'; import type { Group } from '../shapes/Group'; import type { Obstacle } from './types'; /** * Wire route styles: * - `straight` — single segment * - `orthogonal` — Manhattan 90° elbows (optional corner fillet via cornerRadius) * - `smart` — obstacle-aware Manhattan 90° elbows (same finish as orthogonal) * - `curved` — soft string / cable bends (cubic), not hard 90° */ export type RouteStyle = 'straight' | 'orthogonal' | 'smart' | 'curved'; /** Default fillet radius for orthogonal / smart routes (px). 0 = sharp 90°. */ export declare const ROUTE_CORNER_RADIUS = 10; /** Collect bounding boxes from node groups as routing obstacles (world space). */ export declare function collectObstacles(nodes: Node[], exclude?: Node[]): Obstacle[]; /** * Collect obstacles in a parent group's local space using live x/y (drag-safe). * Prefer this when routing connectors during interactive arrange. */ export declare function collectObstaclesInParent(nodes: Node[], parent: Group, exclude?: Node[]): Obstacle[]; /** Compute routed polyline points between two anchors */ export declare function computeRoutePoints(x1: number, y1: number, x2: number, y2: number, style?: RouteStyle, obstacles?: Obstacle[], cornerRadius?: number, /** Shift mid rails so parallel wires do not paint on top of each other. */ railOffset?: number): number[]; /** Route connector between two points */ export declare function routeConnector(app: App, x1: number, y1: number, x2: number, y2: number, style?: RouteStyle, obstacles?: Obstacle[], stroke?: "#60a5fa"): Line | Polyline; /** Get anchor point on node edge toward target (ray–box intersection) */ export declare function getAnchor(node: Node, targetX: number, targetY: number): { x: number; y: number; };