/**
 * 拖动/缩放图元时的「边缘对齐吸附」：对照其他图元的 6 条候选线
 * （左/中/右 + 上/中/下），如果当前 rect 的对应边距离它们小于
 * 阈值（内容坐标），就把 rect 平移到精确贴合，并返回参考辅助线，
 * 供画布上渲染红色对齐线。
 *
 * 阈值应保持小（典型 4~8 px / scale），避免吞掉正常拖动手感。
 */
export interface AlignSnapRect {
    /** 用于排除自身。可为 undefined 表示参与对齐的"其他" rect */
    id?: string;
    left: number;
    top: number;
    width: number;
    height: number;
}
export declare type AlignGuideEdgeX = 'left' | 'centerX' | 'right';
export declare type AlignGuideEdgeY = 'top' | 'centerY' | 'bottom';
export interface AlignGuide {
    orientation: 'v' | 'h';
    /** 该参考线所在坐标（v: x；h: y） */
    position: number;
    /** 沿参考线方向的覆盖范围 [min, max]，便于 SVG 渲染端到端 */
    start: number;
    end: number;
    /** 命中的当前 rect 边 */
    selfEdge: AlignGuideEdgeX | AlignGuideEdgeY;
    /** 命中的对方 rect 边 */
    otherEdge: AlignGuideEdgeX | AlignGuideEdgeY;
    /** 命中的对方 rect id（如果有） */
    otherId?: string;
}
export interface AlignSnapResult {
    rect: {
        left: number;
        top: number;
        width: number;
        height: number;
    };
    guides: AlignGuide[];
}
/** 拖动模式：x/y 两轴可独立平移；不改尺寸 */
export interface AlignSnapDragOptions {
    mode: 'drag';
    threshold: number;
}
/** 缩放模式：根据 handle 决定 left/right/top/bottom 哪条边可动 */
export interface AlignSnapResizeOptions {
    mode: 'resize';
    threshold: number;
    /** 哪些边在当前缩放手柄下「可动」 */
    movableEdgesX?: ('left' | 'right')[];
    movableEdgesY?: ('top' | 'bottom')[];
}
export declare type AlignSnapOptions = AlignSnapDragOptions | AlignSnapResizeOptions;
/**
 * 对一个 rect 做边对齐吸附。返回 snap 后的 rect + 实际命中的辅助线（0~2 条）。
 *
 * 算法：对 x、y 轴独立处理；每轴在所有「自身 3 边 × 所有 other 3 边」组合
 * 中选距离最小且 < threshold 的一对，把自身整体平移让它们贴齐；同时记录
 * 所有「平移后仍精确贴齐」的参考线（可能不止 1 条，例如 left 和 centerX
 * 同时与他人对齐时只有 1 条平移量但 2 条 guide）。
 */
export declare function snapRectToOthers(rect: AlignSnapRect, others: AlignSnapRect[], options: AlignSnapOptions): AlignSnapResult;
