/**
 * Copyright 2023 Impulse Innovations Limited
 *
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import type { LayoutMapping, XYPosition } from 'graphology-layout/utils';
import type { DirectionType, GraphTiers, GroupingLayoutBuilder, SimulationGraph, TieredGraphLayoutBuilder } from '../../types';
import type { BaseLayoutParams, LayoutComputationResult } from './common';
import { GraphLayout, GraphLayoutBuilder } from './common';
declare class SpringLayoutBuilder extends GraphLayoutBuilder<SpringLayout> implements TieredGraphLayoutBuilder, GroupingLayoutBuilder {
    _collisionForce: number;
    _gravity: number;
    _linkForce: number;
    _warmupTicks: number;
    _tierSeparation: number;
    _groupRepelStrength: number;
    orientation: DirectionType;
    tiers: GraphTiers;
    group: string;
    /**
     * Set the multiplier for collision force
     *
     * @param force force to set
     */
    collisionForce(force: number): this;
    /**
     * Set the multiplier for link force
     *
     * @param force force to set
     */
    linkForce(force: number): this;
    /**
     * Set the gravity force
     *
     * @param force force to set
     */
    gravity(force: number): this;
    /**
     * Sets the number of ticks to run the simulation for before displaying the layout
     *
     * @param ticks number of ticks to run before display
     */
    warmupTicks(ticks: number): this;
    /**
     * Set tier separation
     *
     * @param separation separation
     */
    tierSeparation(separation: number): this;
    /**
     * Set the repulsive force strength between groups
     *
     * @param force force
     */
    groupRepelStrength(force: number): this;
    build(): SpringLayout;
}
export interface SpringLayoutParams extends BaseLayoutParams {
    collisionForce: number;
    gravity: number;
    linkForce: number;
    warmupTicks: number;
    tierSeparation: number;
    groupRepelStrength: number;
    orientation: DirectionType;
    tiers: GraphTiers;
    group: string;
}
/**
 * The Spring layout uses a force simulation to position nodes.
 * The layout keeps the simulation running as nodes are being dragged which produces the spring behaviour of edges.
 */
export default class SpringLayout extends GraphLayout<SpringLayoutParams> {
    collisionForce: number;
    gravity: number;
    linkForce: number;
    warmupTicks: number;
    tierSeparation: number;
    groupRepelStrength: number;
    orientation: DirectionType;
    tiers: GraphTiers;
    group: string;
    constructor(builder: SpringLayoutBuilder);
    get name(): string;
    static get Builder(): SpringLayoutBuilder;
    applyLayout(graph: SimulationGraph, forceUpdate?: (layout: LayoutMapping<XYPosition>, edgePoints?: LayoutMapping<XYPosition[]>) => void): Promise<LayoutComputationResult>;
    toLayoutParams(): SpringLayoutParams;
}
export {};
//# sourceMappingURL=spring-layout.d.ts.map