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 {};
