vue2-mind-map
Version:
`vue2-mind-map` 是一个功能丰富的思维导图可视化组件。该组件提供了完整的思维导图展示和交互功能,支持多种数据格式输入、灵活的布局配置、丰富的样式定制和流畅的用户交互体验。目前基于 Vue 2 构建。
72 lines (71 loc) • 4.76 kB
TypeScript
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;
}