import { IPoint } from 'dabbjs/dist/lib/interfaces';
import { Point } from 'dabbjs/dist/lib/point';
import { Rect } from 'dabbjs/dist/lib/rect';
import { Size } from 'dabbjs/dist/lib/size';
import { Type, IWireDefaults, INodeInfo } from './interfaces';
import { ItemBoard } from './itemsBoard';
import { Container } from './container';
export declare class Wire extends ItemBoard {
    protected $: IWireDefaults;
    get type(): Type;
    get count(): number;
    get last(): number;
    get lastLine(): number;
    get isOpen(): boolean;
    rect(): Rect;
    get points(): Point[];
    get edit(): boolean;
    /**
     * @description get/set wire edit mode
     */
    set edit(value: boolean);
    get head(): number;
    get swipe(): number;
    /**
     * @description returns wire size, it's computed every time, so save locally if called multiple times
     */
    get size(): Size;
    /**
     * @description customize arrow for directional wires only
     * @param length arrow line length
     * @param angle arrow lines swipe angle
     */
    arrow(length: number, angle: number): void;
    constructor(container: Container<ItemBoard>, options: {
        [x: string]: any;
    });
    refresh(): Wire;
    nodeRefresh(node: number): Wire;
    setNode(node: number, p: IPoint): Wire;
    translate(dx: number, dy: number): Wire;
    /**
     * @description returns true if a point is valid
     * @comment later see how to change this to validNode, conflict in !ic.valid(node)
     * 		because we don't know if it's a IC or a wire
     * @param {number} node 0-based point index	it can be -1
     * @returns {boolean} true if point is valid
     */
    valid(node: number): boolean;
    /**
     * @description appends a new node at the end, only works in edit mode, creating a wire
     * @param p new point
     */
    append(p: Point): boolean;
    highlightable(node: number): boolean;
    protected setPoints(points: IPoint[]): Wire;
    /**
     * @description returns the node information
     * @param node 0-based pin/node number
     * @param onlyPoint it's discarded
     *
     * this returns absolute (x, y) position
     */
    node(node: number): INodeInfo | undefined;
    static nodeArea: number;
    /**
     * @description detects a point over a node
     * @param p point to check for component node
     * @param ln 1-based line number, ln undefined or 0, checks the whole wire, otherwise just check this line
     */
    over(p: IPoint, ln?: number): number;
    deleteLine(line: number): boolean;
    deleteNode(node: number): Point | undefined;
    insertNode(node: number, p: Point): boolean;
    /**
     * @description standarizes a wire node number to 0..points.length
     * @param {number} node 0-based can be -1:last 0..points.length-1
     * @returns {number} -1 for wrong node or standarized node number, where -1 == last, otherwise node
     */
    standarizeNode(node: number): number;
    defaults(): IWireDefaults;
}
