import { AbsProps, GraphicNode } from "../graphics";
import { AppEventContext } from "../app";
import { IPoint, NodeType } from "../idl";
import { ConnectInfo } from "../graphics/base/NodeConnectEndType";
import { QuickCreateWorker } from "../ability/quickCreate/QuickCreateWorker";
/**
 * PreviewQuickCreateManager 负责 shape 端点 quick create 的 hover 预览。
 *
 * 这个类只处理“预览态”：
 * - 预览节点和预览线会被创建到 previewRoot 下；
 * - 最终通过 AuxiliaryType.PreviewGraphics 挂到辅助层绘制；
 * - 不会直接修改正式文档数据。
 *
 * 真正的创建发生在 click 链路中的 AnchorQuickCreateHandler。
 */
export declare class PreviewQuickCreateManager {
    /**
     * 当前这一轮 quick preview 生成出来的预览图元。
     *
     * 可能有两种结构：
     * - 只有一条预览线：表示前方已有可复用节点；
     * - 一个预览节点 + 一条预览线：表示将要新建节点。
     */
    previewGraphics: GraphicNode[];
    /**
     * 负责判断 quick create 应该连接已有节点，还是新建一个避让节点，
     * 同时也负责计算“预览节点”的摆放位置。
     */
    createWorker: QuickCreateWorker;
    /**
     * 当前是否已经处于 quick preview 状态。
     *
     * 这个标记主要用来避免 pointermove 高频触发时重复创建同一批预览对象。
     */
    inQuickPreview: boolean;
    static PREVIEW_ID: string;
    static PREVIEW_LINE_ID: string;
    /**
     * 进入 quick create 的预览态。
     *
     * 调用时机：
     * - 用户选中了一个支持 quick create 的 shape；
     * - 鼠标 hover 到它的某个 connect anchor；
     * - HoverProcessor 探测到 HoverConnectAnchor 后进入这里。
     *
     * 这个方法会根据当前锚点方向判断两种模式：
     * 1. 前方已有可复用节点：只预览一条连接线；
     * 2. 前方没有可复用节点：预览一个新节点以及连接线。
     *
     * @param startNode 当前被选中的起始节点
     * @param relativePos 当前命中锚点在节点内的相对位置
     * @param ctx 运行时上下文
     */
    enterQuickPreview(startNode: GraphicNode, relativePos: IPoint, ctx: AppEventContext): void;
    /**
     * 仅生成一条预览线。
     *
     * 适用场景：
     * - 当前锚点方向前方已经有一个可复用目标节点；
     * - quick create 此时不需要再预览新节点，只需要表示“将要连接到谁”。
     *
     * 这里会：
     * 1. 计算起点锚点和终点锚点的世界坐标；
     * 2. 组装 startConnect / endConnect；
     * 3. 根据记忆中的 line subtype 生成对应的 points；
     * 4. 在 previewRoot 下创建一个预览 line 节点。
     */
    private computeDrawLine;
    /**
     * 生成“预览节点 + 预览线”。
     *
     * 适用场景：
     * - 当前锚点方向前方没有现成可复用节点；
     * - 系统需要先找一个避让后的位置，预览新的 shape 放在哪里；
     * - 再额外画一条连接线，把起始节点和预览节点连起来。
     */
    private computeDrawLineAndNode;
    /**
     * 退出 quick preview。
     *
     * 调用时机会包括：
     * - 鼠标移出 connect anchor；
     * - 用户点击端点、即将进入真实创建逻辑；
     * - 其他需要强制关闭预览的场景。
     *
     * 这里只清预览态数据，不影响正式节点树。
     */
    exitQuickPreview(ctx: AppEventContext): void;
    /**
     * 清空当前缓存的预览对象，并移除 previewRoot 下的所有子节点。
     *
     * 这是一次纯预览态清理：
     * - 不记录 action log；
     * - 不改动正式文档；
     * - 只影响 hover 预览。
     */
    protected resetPreviewNode(ctx: AppEventContext): void;
    /**
     * 根据起始节点生成一个“半透明预览节点”的 props。
     *
     * 设计上尽量复用起始节点的外观信息：
     * - 尺寸、角度、shapeType 保持一致；
     * - 颜色和边框通过 alpha 降低透明度，表现为预览态；
     * - 如果是纯文本节点，也把文字相关 props 一起带上。
     */
    protected makeupNodeProps(startNode: GraphicNode, nodePos: IPoint): Partial<AbsProps>[];
    protected getQuickCreateNodeType(startNode: GraphicNode): NodeType;
    /**
     * 组装预览连线的 props。
     *
     * 预览线固定使用默认曲线样式，并带右箭头。
     * 这里不会附加 ConnectProps，因为 hover 阶段只需要显示效果，
     * 不需要建立正式连接关系。
     */
    protected makeupLineProps(start: ConnectInfo, end: ConnectInfo, _ctx: AppEventContext): Partial<AbsProps>[];
    private createLineLayoutHandler;
}
//# sourceMappingURL=PreviewQuickCreateManager.d.ts.map