import { type Point } from './geometry.js';
import type { SilkAnchor } from './silk.js';
export type SilkKind = 'frame' | 'capture' | 'tie';
export interface SilkCurve {
    from: Point;
    to: Point;
    sag: number;
}
export interface WeaveTask extends SilkCurve {
    lay: boolean;
    length: number;
    kind: SilkKind;
    grain: number;
    route?: {
        curve: SilkCurve;
        start: number;
        end: number;
    };
}
export interface WebPlan {
    tasks: WeaveTask[];
    style: 'drape' | 'fan' | 'bridge';
    ink: string;
}
export declare const distance: (a: Point, b: Point) => number;
export declare function curvePoint(from: Point, to: Point, sag: number, t: number): Point;
export declare function taskPoint(task: WeaveTask, t: number): Point;
/** Site geometry sets the footprint; a private seed varies tension, branching, gaps and spacing. */
export declare function buildWeb(origin: Point, anchors: readonly SilkAnchor[], density: number, span: number, seed: number): WebPlan | null;
//# sourceMappingURL=weaving.d.ts.map