import { DecoratedEdge, DecoratedNode, DecorationFunction, EdgeDecoration, EdgeDecorationFunction, EdgeDecorator, ModelEdge, ModelNode, NodeDecoration, NodeDecorationFunction, NodeDecorator } from './types';
export declare class DecoratorModel {
    private readonly nodeDecorators;
    private readonly nodeDefaults;
    private readonly edgeDecorators;
    private readonly edgeDefaults;
    private readonly nodeLabelsHidden;
    private readonly edgeLabelsHidden;
    static readonly DEFAULT_NODE_DECORATION: NodeDecoration;
    static readonly DEFAULT_EDGE_DECORATION: EdgeDecoration;
    static readonly idAsLabelNode: NodeDecorator;
    static readonly idAsLabelNodeEdge: EdgeDecorator;
    static createDefault(options?: {
        nodeDecorators?: NodeDecorator[];
        nodeDefaults?: Partial<NodeDecoration> | NodeDecorationFunction;
        edgeDecorators?: EdgeDecorator[];
        edgeDefaults?: Partial<EdgeDecoration> | EdgeDecorationFunction;
        hideNodeLabels?: boolean;
        hideEdgeLabels?: boolean;
    }): DecoratorModel;
    constructor(nodeDecorators: NodeDecorator[], nodeDefaults: Partial<NodeDecoration> | NodeDecorationFunction, edgeDecorators: EdgeDecorator[], edgeDefaults: Partial<EdgeDecoration> | EdgeDecorationFunction, nodeLabelsHidden: boolean, edgeLabelsHidden: boolean);
    /**
     * Get the decoration that is applied to all nodes, before anything is overridden by decorators
     *
     * Use this to apply blanket styling to nodes to minimise the performance impact of per-node styling
     */
    getDefaultNodeDecorator(): DecorationFunction<NodeDecoration, NodeDecoration>;
    /**
     * Get the decoration that is applied to all edges, before anything is overridden by decorators
     *
     * Use this to apply blanket styling to edges to minimise the performance impact of per-edge styling
     */
    getDefaultEdgeDecorator(): DecorationFunction<EdgeDecoration, EdgeDecoration>;
    /**
     * Adds a function to the given nodes that provides the decoration overrides for the node
     * @param modelNodes to be decorated
     */
    getDecoratedNodes(modelNodes: ModelNode[]): DecoratedNode[];
    /**
     * Adds a function to the given edges that provides the decoration overrides for the edge
     * @param modelEdges to be decorated
     */
    getDecoratedEdges(modelEdges: ModelEdge[]): DecoratedEdge[];
    /** Does the decorator already exist in the model. === equality is used */
    isNodeDecoratorSet(decorator: NodeDecorator): boolean;
    /** Add a new decorator */
    addNodeDecorator(decorator: NodeDecorator): DecoratorModel;
    /** Remove an existing decorator. === equality is used */
    removeNodeDecorator(decorator: NodeDecorator): DecoratorModel;
    /** Toggle a decorator on or off */
    toggleNodeDecorator(decorator: NodeDecorator): DecoratorModel;
    /** Does the decorator already exist in the model. === equality is used */
    isEdgeDecoratorSet(decorator: EdgeDecorator): boolean;
    /** Add a new decorator */
    addEdgeDecorator(decorator: EdgeDecorator): DecoratorModel;
    /** Remove an existing decorator. === equality is used */
    removeEdgeDecorator(decorator: EdgeDecorator): DecoratorModel;
    /** Toggle a decorator on or off */
    toggleEdgeDecorator(decorator: EdgeDecorator): DecoratorModel;
    hideNodeLabels(hide: boolean): DecoratorModel;
    hideEdgeLabels(hide: boolean): DecoratorModel;
    isHideNodeLabels(): boolean;
    isHideEdgeLabels(): boolean;
    private isDecoratorSet;
    private addDecorator;
    private removeDecorator;
    private getNodeDecorationOverrides;
    private getEdgeDecorationOverrides;
    private static isFunction;
    private static wrapDecorator;
}
