import { DraggableManager } from "../common/entities/Abilities/Draggable/DraggableManager";
import { WheelManager } from "../common/entities/Abilities/WheelManager";
import { BaseEventMap, EventEmitter } from "../common/entities/Core/EventEmitter";
import { Container } from "../common/entities/Dom/Container";
import { Element } from "../common/entities/Dom/Element";
import { Line } from "../common/entities/Shapes/Line";
import { BaseEntity, BaseRawData, BaseRawTreeNodeData, BaseRawFlatNodeData, InputDataType, BaseStyleOptions, BaseDragOptions, BaseZoomOptions, BaseVisualizerOptions, BaseVisualizerEventMap } from "./Base2DVisualizerTypes";
export declare abstract class Base2DVisualizer<TEntity extends BaseEntity, // 处理后的内部实体类型 (如 MindNode)
TRawInputType extends InputDataType<TEntity, BaseRawTreeNodeData, BaseRawFlatNodeData>, // 构造函数/setRootEntityData的输入类型
TRawStoredType extends BaseRawData, // 存储在 entityToOriginalDataMap 中的原始数据类型 (如 TreeNode 或 FlatNode)
TStyle extends BaseStyleOptions, TDragOpts extends BaseDragOptions, TZoomOpts extends BaseZoomOptions, TOptions extends BaseVisualizerOptions<TStyle, TDragOpts, TZoomOpts, TRawStoredType, TEntity>, TSubclassEventMap extends BaseEventMap> extends EventEmitter<TSubclassEventMap | BaseVisualizerEventMap<TRawStoredType, TEntity>> {
    protected containerDom: HTMLElement;
    protected rootEntity: TEntity;
    protected outerContainer: Container;
    protected rootContainer: Container;
    protected elementToEntityMap: Map<Element, TEntity>;
    protected entityToOriginalDataMap: Map<TEntity, TRawStoredType>;
    protected style: Required<TStyle>;
    protected dragOptions: Required<TDragOpts>;
    protected zoomOptions: Required<TZoomOpts>;
    protected initialOffset?: {
        x?: number;
        y?: number;
    };
    protected draggableManager?: DraggableManager;
    protected wheelManager?: WheelManager;
    protected optionsContentCallback?: (originalDataOrEntity: TRawStoredType | TEntity) => string | HTMLElement | HTMLElement[];
    constructor(initialData: TRawInputType, containerDom: HTMLElement, options: TOptions);
    protected abstract getDefaultStyles(): Required<TStyle>;
    protected abstract getDefaultDragOptions(): Required<TDragOpts>;
    protected abstract getDefaultZoomOptions(): Required<TZoomOpts>;
    /**
     * 将原始输入数据转换为内部 TEntity 结构，并填充 this.entityToOriginalDataMap
     */
    protected abstract _processDataToEntities(data: TRawInputType): TEntity;
    rebuild(): void;
    clear(): void;
    /** 子类可以覆盖此方法来清理自定义资源 (例如 MindMap 中的 linesMap) */
    protected _clearCustomResources(): void;
    destroy(): void;
    setRootEntityData(data: TRawInputType): void;
    protected layoutAndCreateElementsAndRender(): void;
    /** 应用根容器的样式，子类可覆盖 */
    protected _applyRootContainerStyles(): void;
    /** 计算实体布局，更新 TEntity 对象的 position 和 size */
    protected abstract _calculateLayout(rootEntity: TEntity): void;
    /** 递归地将 TEntity 结构转换为视觉元素 (Element) 和连接线 (Line) */
    protected abstract _convertEntitiesToVisualsRecursive(entity: TEntity): [Element[], Line[]];
    /** 为给定的 TEntity 创建视觉元素 Element */
    protected _createVisualElement(entity: TEntity): Element;
    /** 子类实现：将样式应用于视觉元素 */
    protected abstract _applyStylesToVisualElement(element: Element, entity: TEntity): void;
    /** 解析实体的显示内容 */
    protected _resolveEntityContent(entity: TEntity): string | HTMLElement | HTMLElement[] | undefined;
    /** 获取与 TEntity 关联的原始数据对象 */
    protected _getOriginalDataForEntity(entity: TEntity): TRawStoredType | TEntity;
    protected _initializeDraggableManager(): void;
    protected _initializeWheelManager(): void;
    /** 处理实体拖拽，子类实现 */
    protected abstract _handleEntityDrag(draggedElement: Element, deltaX: number, deltaY: number): void;
    protected _handleCanvasDrag(deltaX: number, deltaY: number): void;
    zoomIn(cx?: number, cy?: number): void;
    zoomOut(cx?: number, cy?: number): void;
    resetZoom(cx?: number, cy?: number): void;
    findEntityById(entityId: string): TEntity | undefined;
    /** 递归查找实体，子类实现（因为子类知道 TEntity 的层级结构） */
    protected abstract _findEntityByIdRecursive(currentEntity: TEntity, entityId: string): TEntity | undefined;
    focusOnEntity(entityId: string): boolean;
    updateAllEntityContents(): void;
    debug(): void;
}
