vue2-mind-map
Version:
`vue2-mind-map` 是一个功能丰富的思维导图可视化组件。该组件提供了完整的思维导图展示和交互功能,支持多种数据格式输入、灵活的布局配置、丰富的样式定制和流畅的用户交互体验。目前基于 Vue 2 构建。
106 lines (105 loc) • 4.4 kB
TypeScript
import { Vector } from "../../common/entities/Core/Vector";
import { ContentType, MindNode } from './MindNode';
import { Element } from "../../common/entities/Dom/Element";
import { Line } from "../../common/entities/Shapes/Line";
import { AlignOptions } from "../algorithm/Alignment";
import { BaseStyleOptions, BaseDragOptions, BaseZoomOptions, BaseVisualizerOptions, BaseEntityDestroyedEvent, BaseLayoutUpdatedEvent, BaseVisualizerEventMap, InputDataType as BaseInputDataType, BaseRawTreeNodeData, BaseRawFlatNodeData } from '../../diagram/Base2DVisualizerTypes';
import { Base2DVisualizer } from '../../diagram/Base2DVisualizer';
export interface TreeNode extends BaseRawTreeNodeData {
id?: string;
position?: {
x: number;
y: number;
} | Vector;
size?: {
x: number;
y: number;
} | Vector;
children?: TreeNode[];
content?: ContentType<TreeNode>;
[key: string]: any;
}
export interface FlatNode extends BaseRawFlatNodeData {
id?: string;
parentId?: string;
position?: {
x: number;
y: number;
} | Vector;
size?: {
x: number;
y: number;
} | Vector;
content?: ContentType<FlatNode>;
[key: string]: any;
}
export interface MindMapStyle extends BaseStyleOptions {
lineWidth?: number;
lineColor?: string;
nodeBorderWidth?: number;
nodeBgColor?: string;
nodeBorderColor?: string;
}
export interface MindMapDragOptions extends BaseDragOptions {
}
export interface MindMapZoomOptions extends BaseZoomOptions {
}
export interface MindMapAlign {
mode: AlignOptions['mode'];
targetNodeId?: AlignOptions['targetNodeId'];
}
export interface MindMapOptions extends BaseVisualizerOptions<MindMapStyle, MindMapDragOptions, MindMapZoomOptions, TreeNode | FlatNode, MindNode> {
isHorizontal?: boolean;
siblingSeparation?: number;
levelSeparation?: number;
lineShape?: 'straight' | 'curved' | 'zigzag';
align?: MindMapAlign;
}
export declare enum MindMapEvent {
NODE_DESTROYED = "node:destroyed",
LAYOUT_UPDATED = "layout:updated",
MINDMAP_DESTROYED = "mindmap:destroyed"
}
export interface MindMapNodeDestroyEvent extends BaseEntityDestroyedEvent<TreeNode | FlatNode, MindNode> {
}
export interface MindMapLayoutEvent extends BaseLayoutUpdatedEvent {
direction: 'horizontal' | 'vertical';
}
export interface MindMapEventMap extends BaseVisualizerEventMap<TreeNode | FlatNode, MindNode> {
[MindMapEvent.NODE_DESTROYED]: MindMapNodeDestroyEvent;
[MindMapEvent.LAYOUT_UPDATED]: MindMapLayoutEvent;
[MindMapEvent.MINDMAP_DESTROYED]: void;
}
declare type MindMapInputData = BaseInputDataType<MindNode, TreeNode, FlatNode>;
export declare class MindMap extends Base2DVisualizer<MindNode, // TEntity
MindMapInputData, // TRawInputType
// TRawInputType
TreeNode | FlatNode, // TRawStoredType
MindMapStyle, MindMapDragOptions, MindMapZoomOptions, MindMapOptions, MindMapEventMap> {
private _isHorizontal;
private _siblingSeparation;
private _levelSeparation;
private _lineShape;
private align;
private linesMap;
constructor(data: MindMapInputData, containerDom: HTMLElement, options?: MindMapOptions);
protected getDefaultStyles(): Required<MindMapStyle>;
protected getDefaultDragOptions(): Required<MindMapDragOptions>;
protected getDefaultZoomOptions(): Required<MindMapZoomOptions>;
protected _processDataToEntities(data: MindMapInputData): MindNode;
protected _calculateLayout(rootEntity: MindNode): void;
protected _convertEntitiesToVisualsRecursive(entity: MindNode): [Element[], Line[]];
protected _applyStylesToVisualElement(element: Element, entity: MindNode): void;
protected _applyRootContainerStyles(): void;
protected _handleEntityDrag(draggedElement: Element, deltaX: number, deltaY: number): void;
protected _findEntityByIdRecursive(currentEntity: MindNode, entityId: string): MindNode | undefined;
protected _clearCustomResources(): void;
get isHorizontal(): boolean;
setHorizontal(isHorizontal: boolean): void;
private updateConnectionsForNode;
private createMindMapConnectionLine;
private calculateConnectionPoint;
private createMindNodesFromTreeData;
private createMindNodesFromFlatData;
}
export {};