import { BaseLayout } from '../layouts';
import type { GraphData, LayoutOptions } from '../spec';
import type { STDLayoutOptions } from '../spec/layout';
import type { DrawData } from '../transforms/types';
import type { RuntimeContext } from './types';
export declare class LayoutController {
private context;
private supervisor?;
private instance?;
private instances;
private animationResult?;
private get presetOptions();
private get options();
constructor(context: RuntimeContext);
getLayoutInstance(): BaseLayout[];
/**
* 前布局,即在绘制前执行布局
*
* Pre-layout, that is, perform layout before drawing
* @param data - 绘制数据 | Draw data
* @remarks
* 前布局应该只在首次绘制前执行,后续更新不会触发
*
* Pre-layout should only be executed before the first drawing, and subsequent updates will not trigger
*/
preLayout(data: DrawData): Promise;
/**
* 后布局,即在完成绘制后执行布局
*
* Post layout, that is, perform layout after drawing
* @param layoutOptions - 布局配置项 | Layout options
*/
postLayout(layoutOptions?: LayoutOptions | undefined): Promise;
private transformDataAfterLayout;
/**
* 模拟布局
*
* Simulate layout
* @returns 模拟布局结果 | Simulated layout result
*/
simulate(): Promise;
stepLayout(data: GraphData, options: STDLayoutOptions, index: number): Promise;
private graphLayout;
private treeLayout;
private inferTreeLayoutOffset;
stopLayout(): void;
getLayoutData(options: STDLayoutOptions): GraphData;
/**
* 创建布局实例
*
* Create layout instance
* @param options - 布局配置项 | Layout options
* @returns 布局对象 | Layout object
*/
private initGraphLayout;
private updateElementPosition;
destroy(): void;
}