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, // 构造函数/setRootEntityData的输入类型 TRawStoredType extends BaseRawData, // 存储在 entityToOriginalDataMap 中的原始数据类型 (如 TreeNode 或 FlatNode) TStyle extends BaseStyleOptions, TDragOpts extends BaseDragOptions, TZoomOpts extends BaseZoomOptions, TOptions extends BaseVisualizerOptions, TSubclassEventMap extends BaseEventMap> extends EventEmitter> { protected containerDom: HTMLElement; protected rootEntity: TEntity; protected outerContainer: Container; protected rootContainer: Container; protected elementToEntityMap: Map; protected entityToOriginalDataMap: Map; protected style: Required; protected dragOptions: Required; protected zoomOptions: Required; 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; protected abstract getDefaultDragOptions(): Required; protected abstract getDefaultZoomOptions(): Required; /** * 将原始输入数据转换为内部 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; }