import { GraphLib } from '../model/data.js';
import { RuntimeContext } from '../runtime/context.js';
import { Supervisor } from '../runtime/supervisor.js';
import { GraphData, GraphNode, GraphEdge } from '../types/data.js';
import { BaseLayoutOptions, Layout, LayoutWithIterations } from './types.js';
import { Point } from '../types/point.js';
/**
* 布局基类
*
* Base class for layouts
*/
declare abstract class BaseLayout implements Layout {
abstract readonly id: string;
protected abstract getDefaultOptions(): O;
protected initialOptions: O;
protected runtimeOptions: O;
protected context: RuntimeContext;
protected model: GraphLib;
protected supervisor: Supervisor | null;
constructor(options?: Partial);
get options(): O;
protected mergeOptions(base: O, patch?: Partial): O;
execute(data: GraphData, userOptions?: Partial): Promise;
protected abstract layout(options: O): Promise;
protected layoutInWorker(data: GraphData, options: O): Promise;
forEachNode(callback: (node: GraphNode, index: number) => void): void;
forEachEdge(callback: (edge: GraphEdge, index: number) => void): void;
destroy(): void;
}
/**
* 迭代布局基类
*
* Base class for iterative layouts
*/
declare abstract class BaseLayoutWithIterations extends BaseLayout {
abstract stop(): void;
abstract tick(iterations: number): void;
abstract restart(): void;
abstract setFixedPosition(nodeId: string, position: Point | null): void;
}
/**
* 判断布局是否为迭代布局
*
* Determine whether the layout is an iterative layout
*/
declare function isLayoutWithIterations(layout: any): layout is LayoutWithIterations;
export { BaseLayout, BaseLayoutOptions, BaseLayoutWithIterations, isLayoutWithIterations };