/**
 * Arcs and labels — aligned with Python `elements/lines.py` (`Arc2`–`EncircleBox`).
 */
import { Element } from "../element.js";
import type { Arcdirection } from "../types.js";
import { Point, type XY } from "../geometry/point.js";
/** Quadratic Bezier arc between `at` and `to` (or `delta`). */
export declare class Arc2 extends Element {
    constructor(userParams?: Record<string, unknown> & {
        k?: number;
        arrow?: string;
        to?: XY;
        delta?: XY;
    });
    to(target: XY, dx?: number, dy?: number): this;
    delta(dx: number, dy: number): this;
    k(k: number): this;
    arrow(arrow: string | undefined): this;
    _place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
        point: Point;
        theta: number;
    };
}
/** Cubic Bezier arc (`th1`/`th2` in degrees). */
export declare class Arc3 extends Element {
    constructor(userParams?: Record<string, unknown> & {
        k?: number;
        th1?: number;
        th2?: number;
        arrow?: string;
        to?: XY;
        delta?: XY;
        arrowlength?: number;
        arrowwidth?: number;
    });
    to(target: XY, dx?: number, dy?: number): this;
    delta(dx: number, dy: number): this;
    k(k: number): this;
    th1(deg: number): this;
    th2(deg: number): this;
    arrow(arrow: string | undefined): this;
    arrowlength(len: number): this;
    arrowwidth(w: number): this;
    protected setLabelAlign(dx: number, dy: number): void;
    _place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
        point: Point;
        theta: number;
    };
}
/** Curved annotation arrow (label near tail). */
export declare class Annotate extends Arc3 {
    constructor(userParams?: Record<string, unknown> & {
        k?: number;
        th1?: number;
        th2?: number;
        arrow?: string;
        to?: XY;
        delta?: XY;
        arrowlength?: number;
        arrowwidth?: number;
    });
    protected setLabelAlign(_dx: number, dy: number): void;
}
/** Arc3 with horizontal tangents at endpoints (Z-shaped). */
export declare class ArcZ extends Arc3 {
    constructor(userParams?: Record<string, unknown> & {
        k?: number;
        arrow?: string;
        to?: XY;
        delta?: XY;
        arrowlength?: number;
        arrowwidth?: number;
    });
}
/** Arc3 with vertical tangents at endpoints (N-shaped). */
export declare class ArcN extends Arc3 {
    constructor(userParams?: Record<string, unknown> & {
        k?: number;
        arrow?: string;
        to?: XY;
        delta?: XY;
        arrowlength?: number;
        arrowwidth?: number;
    });
}
/** Circular arc through `at` and `to`. */
export declare class ArcLoop extends Element {
    constructor(userParams?: Record<string, unknown> & {
        radius?: number;
        arrow?: string;
        to?: XY;
        delta?: XY;
        arrowlength?: number;
        arrowwidth?: number;
    });
    to(target: XY, dx?: number, dy?: number): this;
    delta(dx: number, dy: number): this;
    radius(r: number): this;
    arrow(arrow: string | undefined): this;
    arrowlength(len: number): this;
    arrowwidth(w: number): this;
    _place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
        point: Point;
        theta: number;
    };
}
/** Current arrow above/below a line (use `overElement` to mimic Python `.at(el)`). */
export declare class CurrentLabel extends Element {
    protected _side: "top" | "bottom" | "left" | "right";
    constructor(userParams?: Record<string, unknown> & {
        length?: number;
        top?: boolean;
        reverse?: boolean;
        ofst?: number;
        headlength?: number;
        headwidth?: number;
        /** When set, position and θ are taken from this element (after it is placed). */
        overElement?: Element;
    });
    /**
     * When `xy` is an {@link Element}, behave like Python `CurrentLabel.at(el)`:
     * inherit placement from that element (stored as `overElement`).
     */
    at(xy: XY | readonly [Element, string] | Element, dx?: number, dy?: number): this;
    /** Alias for `at(otherElement)` (Python-style name). */
    over(el: Element): this;
    protected placeArrowSegment(_loc: string): void;
    /**
     * Python `CurrentLabel.at(Element)` — `ilabel`, host `flip`/`reverse`, bbox in **local** coords then `transform`.
     */
    protected placeFromOverElement(over: Element): void;
    _place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
        point: Point;
        theta: number;
    };
}
/** Voltage label as a quadratic arc. */
export declare class VoltageLabelArc extends CurrentLabel {
    constructor(userParams?: Record<string, unknown> & {
        length?: number;
        ofst?: number;
        bend?: number;
        top?: boolean;
        reverse?: boolean;
        headlength?: number;
        headwidth?: number;
        overElement?: Element;
    });
    protected placeArrowSegment(_loc: string): void;
}
/** Inline current arrow on a lead (`overElement` mimics `.at(el)`). */
export declare class CurrentLabelInline extends Element {
    constructor(direction?: "in" | "out", ofst?: number, start?: boolean, userParams?: Record<string, unknown> & {
        headlength?: number;
        headwidth?: number;
        overElement?: Element;
    });
    at(xy: XY | readonly [Element, string] | Element, dx?: number, dy?: number): this;
    over(el: Element): this;
    _place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
        point: Point;
        theta: number;
    };
}
/** Right-angle impedance-style arrow. */
export declare class ZLabel extends Element {
    constructor(userParams?: Record<string, unknown> & {
        ofst?: number;
        hofst?: number;
        length?: number;
        lengthtip?: number;
        headlength?: number;
        headwidth?: number;
        flip?: boolean;
        overElement?: Element;
    });
    at(xy: XY | readonly [Element, string] | Element, dx?: number, dy?: number): this;
    over(el: Element): this;
    _place(dwgxy: XY, dwgtheta: number, dwgparams: Record<string, unknown>): {
        point: Point;
        theta: number;
    };
}
/** Elliptical loop arrow (mesh notation). */
export declare class LoopArrow extends Element {
    constructor(userParams?: Record<string, unknown> & {
        direction?: Arcdirection;
        theta1?: number;
        theta2?: number;
        width?: number;
        height?: number;
    });
}
/** Loop current inside a quad of placed elements (order: top, right, bottom, left). */
export declare class LoopCurrent extends LoopArrow {
    constructor(userParams: Record<string, unknown> & {
        elm_list: [Element, Element, Element, Element];
        direction?: Arcdirection;
        theta1?: number;
        theta2?: number;
        pad?: number;
    });
}
/** Ellipse around a list of elements. */
export declare class Encircle extends Element {
    constructor(userParams: Record<string, unknown> & {
        elm_list: Element[];
        padx?: number;
        pady?: number;
        includelabels?: boolean;
    });
}
/** Rounded rectangle around a list of elements. */
export declare class EncircleBox extends Element {
    constructor(userParams: Record<string, unknown> & {
        elm_list: Element[];
        cornerradius?: number;
        padx?: number;
        pady?: number;
        includelabels?: boolean;
    });
}
