import { MetadataStateManager } from '@anglr/dynamic';
import { Dictionary } from '@jscrpt/common';
import { Observable, Subject } from 'rxjs';
import { RelationsInput, RelationsNode, RelationsNodeMetadata } from '../../interfaces';
import { WaitingInputRelation } from './relationsNodeManager.interface';
import * as i0 from "@angular/core";
/**
 * Class used for handling relations nodes metadata
 */
export declare class RelationsNodeManager implements MetadataStateManager<RelationsNodeMetadata[]> {
    /**
     * Active relation point input
     */
    protected _activeInput: RelationsInput | null | undefined;
    /**
     * Active relations node
     */
    protected _activeNode: string | null | undefined;
    /**
     * Registered relations nodes
     */
    protected _nodes: Dictionary<RelationsNode>;
    /**
     * Waiting input relations to be processed when node is created
     */
    protected _waitingInputRelations: Dictionary<WaitingInputRelation[]>;
    /**
     * Used for emitting node registration
     */
    protected _nodesChange: Subject<void>;
    /**
     * Used for emitting active node change
     */
    protected _activeNodeChange: Subject<void>;
    /**
     * Used for emitting node registration change
     */
    protected _nodeRegisterChange: Subject<RelationsNode>;
    /**
     * Used for emitting node unregistration change
     */
    protected _nodeUnregisterChange: Subject<RelationsNode>;
    /**
     * Registered relation nodes
     */
    get nodes(): Dictionary<RelationsNode>;
    /**
     * Occurs when new node is registered
     */
    get nodesChange(): Observable<void>;
    /**
     * Active relations node
     */
    get activeNode(): string | null | undefined;
    /**
     * Occurs when active relations node is changed
     */
    get activeNodeChange(): Observable<void>;
    /**
     * Occurs when registered node is changed
     */
    get nodeRegisterChange(): Observable<RelationsNode>;
    /**
     * Occurs when unregistered node is changed
     */
    get nodeUnregisterChange(): Observable<RelationsNode>;
    /**
     * Sets active relation input
     * @param input - Component that represents input
     */
    setActiveInput(input: RelationsInput | null | undefined): void;
    /**
     * Gets active relation input
     */
    getActiveInput(): RelationsInput | null | undefined;
    /**
     * Registers node into manager
     * @param node - Node to be registered
     */
    registerNode(node: RelationsNode): void;
    /**
     * Unregisters node from manager
     * @param node - Node to be unregistered
     */
    unregisterNode(node: RelationsNode): void;
    /**
     * Gets current metadata
     */
    getMetadata(): RelationsNodeMetadata[];
    /**
     * Sets active relations node
     * @param id node identifier
     */
    setActiveNode(id?: string | null): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<RelationsNodeManager, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<RelationsNodeManager>;
}
//# sourceMappingURL=relationsNodeManager.service.d.ts.map