import { Vector } from "../common/entities/Core/Vector";
import { MouseButton } from "../common/entities/Abilities/Draggable/BaseDraggable";
import { BaseEventMap } from "../common/entities/Core/EventEmitter";
export interface BaseEntity {
    id?: string;
    position: Vector;
    size: Vector;
    children: BaseEntity[];
    parent?: BaseEntity | null;
    content?: any;
    [key: string]: any;
}
export interface BaseRawData {
    id?: string;
    position?: {
        x: number;
        y: number;
    } | Vector;
    size?: {
        x: number;
        y: number;
    } | Vector;
    content?: any;
    [key: string]: any;
}
export interface BaseRawTreeNodeData extends BaseRawData {
    children?: BaseRawTreeNodeData[];
}
export interface BaseRawFlatNodeData extends BaseRawData {
    parentId?: string;
}
/** 构造函数和 setRootEntityData 接受的输入数据类型 */
export declare type InputDataType<TEntity extends BaseEntity, TRawTreeNode extends BaseRawTreeNodeData, TRawFlatNode extends BaseRawFlatNodeData> = TEntity | TRawTreeNode | TRawFlatNode[];
export interface BaseStyleOptions {
    [key: string]: any;
}
export interface BaseDragOptions {
    enableEntityDrag?: boolean;
    enableCanvasDrag?: boolean;
    dragEntityButton?: MouseButton[] | MouseButton;
    dragCanvasButton?: MouseButton[] | MouseButton;
    useThrottle?: boolean;
}
export interface BaseZoomOptions {
    enableWheelZoom?: boolean;
    zoomStep?: number;
    invertWheelDirection?: boolean;
    minZoom?: number;
    maxZoom?: number;
}
/** 通用可视化器选项 */
export interface BaseVisualizerOptions<TStyle extends BaseStyleOptions, TDrag extends BaseDragOptions, TZoom extends BaseZoomOptions, TRawData, // 与实体关联的原始数据类型
TEntity extends BaseEntity> {
    initialOffset?: {
        x?: number;
        y?: number;
    };
    style?: TStyle;
    dragOptions?: TDrag;
    zoomOptions?: TZoom;
    contentCallback?: (originalDataOrEntity: TRawData | TEntity) => string | HTMLElement | HTMLElement[];
}
export declare enum BaseVisualizerEvent {
    ENTITY_DESTROYED = "entity:destroyed",
    LAYOUT_UPDATED = "layout:updated",
    VISUALIZER_DESTROYED = "visualizer:destroyed"
}
export interface BaseEntityDestroyedEvent<TRawData, TEntity extends BaseEntity> {
    entity: TEntity;
    originalData: TRawData | TEntity;
}
export interface BaseLayoutUpdatedEvent {
}
export interface BaseVisualizerEventMap<TRawData, TEntity extends BaseEntity> extends BaseEventMap {
    [BaseVisualizerEvent.ENTITY_DESTROYED]: BaseEntityDestroyedEvent<TRawData, TEntity>;
    [BaseVisualizerEvent.LAYOUT_UPDATED]: BaseLayoutUpdatedEvent;
    [BaseVisualizerEvent.VISUALIZER_DESTROYED]: void;
}
export declare const DEFAULT_BASE_DRAG_ENTITY_BUTTON = MouseButton.Left;
export declare const DEFAULT_BASE_DRAG_CANVAS_BUTTON: MouseButton[];
