import { EventEmitter_, EventEmitter_EE } from '../EventEmitter';
import { Dict } from '../types/Dict';
import { Shape } from './util/geometry';
export type SimulationOpt = {
    alpha?: number;
    alphaMin?: number;
    alphaDecay?: number;
    alphaTarget?: number;
    velocityDecay?: number;
    stability?: number;
    n?: number;
    t?: number;
    force?: (alpha: number) => void;
};
export type SimNode<T extends {} = {}> = T & {
    x: number;
    y: number;
    fx?: number;
    fy?: number;
    shape: Shape;
    r: number;
    width: number;
    height: number;
    vx: number;
    vy: number;
    ax: number;
    ay: number;
    hx: number;
    hy: number;
    _x: number;
    _y: number;
};
export interface SimLink<T> {
    l: number;
    s: number;
    source_id: string;
    target_id: string;
    padding: {
        source: number;
        target: number;
    };
    detail: T;
}
export type Simulation_EE = {
    tick: [];
    end: [];
};
export type SimulationEvents = EventEmitter_EE<Simulation_EE> & Simulation_EE;
export declare class Simulation<N = {}, L = {}> extends EventEmitter_<SimulationEvents> {
    _nodes: Dict<SimNode<N>>;
    _links: Dict<SimLink<L>>;
    private _paused;
    private _alpha;
    private _alphaDecay;
    private _alphaMin;
    private _alphaTarget;
    private _stability;
    private _velocityDecay;
    private _n;
    private _t;
    private _force;
    private _frame;
    constructor({ alpha, alphaMin, alphaTarget, alphaDecay, velocityDecay, n, t, stability, force, }: SimulationOpt);
    start(): void;
    restart(): void;
    stop(): void;
    nodes(nodes?: Dict<SimNode<N>>): Dict<SimNode<N>>;
    links(links?: Dict<SimLink<L>>): Dict<SimLink<L>>;
    alphaDecay(alphaDecay?: number): number;
    alphaMin(_alphaMin?: number): number;
    alpha(alpha?: number): number;
    velocityDecay(_velocityDecay?: number): number;
    alphaTarget(_alphaTarget?: number): number;
    stability(_stability?: number): number;
    private _tick;
}
