import { Injector } from '@angular/core';
import { Logger } from '@anglr/common';
import { Dictionary } from '@jscrpt/common';
import { RelationsComponentManager } from '../relationsComponentManager/relationsComponentManager.service';
import { RelationsProcessorComponentData, RelationsProcessorInputOutputData } from '../relationsProcessor/relationsProcessor.interface';
import { RelationsProcessor } from '../relationsProcessor/relationsProcessor.service';
import { MarkForCheckId, RelationsChange } from './relationsChangeDetector.interface';
import { RelationsChangeDetectorOptions } from './relationsChangeDetector.options';
import * as i0 from "@angular/core";
/**
 * Change detector for relations, which allows async change detection
 */
export declare class RelationsChangeDetector {
    protected injector: Injector;
    protected logger: Logger;
    /**
     * Array of mark for check ids that were called before initialization
     */
    protected markedBeforeInit: MarkForCheckId[];
    /**
     * Instance of relations processor for handling relations
     */
    protected ɵrelationsProcessor: RelationsProcessor | undefined | null;
    /**
     * Gets instance of relations processor for handling relations
     */
    protected get relationsProcessor(): RelationsProcessor;
    /**
     * Instance of relations component manager storing registered components
     */
    protected ɵrelationsComponentManager: RelationsComponentManager | undefined | null;
    /**
     * Gets instance of relations component manager storing registered components
     */
    protected get relationsComponentManager(): RelationsComponentManager;
    /**
     * Objects storing components and theirs outputs and related output input relations
     */
    protected ɵoutputsComponents: Dictionary<Dictionary<RelationsProcessorInputOutputData[]>>;
    /**
     * Instance of parent relations change detector
     */
    protected parent: RelationsChangeDetector | undefined | null;
    /**
     * Objects storing components and theirs outputs and related output input relations
     */
    protected get outputsComponents(): Dictionary<Dictionary<RelationsProcessorInputOutputData[]>>;
    /**
     * Options for relations change detector
     */
    protected options: RelationsChangeDetectorOptions;
    /**
     * Identifier of running timeout
     */
    protected timeout: number | undefined | null;
    /**
     * Array of changes that should be checked and transfered in first run
     */
    protected firstRunChanges: RelationsChange[];
    /**
     * Array of changes that should be checked and transfered in second run
     */
    protected secondRunChanges: RelationsChange[];
    /**
     * Indication whether is check running
     */
    protected checkRunning: boolean;
    constructor(injector: Injector, logger: Logger, options?: RelationsChangeDetectorOptions);
    /**
     * Marks input component connected to this for checking
     * @param id - Identification of what should be checked
     */
    markForCheck(id: MarkForCheckId): void;
    /**
     *
     * @param relations - Object storing current relations
     */
    initialize(relations: Dictionary<RelationsProcessorComponentData>): void;
    /**
     * Runs check for marked components
     */
    protected runCheck(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<RelationsChangeDetector, [null, null, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<RelationsChangeDetector>;
}
//# sourceMappingURL=relationsChangeDetector.service.d.ts.map