import { ComponentFactoryResolver, ComponentFactory, InjectionToken, Type, Compiler, Injector } from '@angular/core';
import { Location } from '@angular/common';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { Resolver } from './resolver';
import { Marker } from './marker';
import { Normalizer } from './normalizer';
import { Target } from './interfaces';
export declare type LazyView = () => Promise<Type<any>>;
export declare const NAVIGATION_PREFIX: InjectionToken<BehaviorSubject<string>>;
export declare class Traverser {
    private location;
    private resolver;
    private marker;
    private normalizer;
    private ngResolver;
    private compiler;
    private injector;
    private prefix;
    target: BehaviorSubject<Target>;
    beforeTraverse: Subject<[Subject<boolean>, string]>;
    traverseTo: Subject<{
        path: string;
        navigate: boolean;
    }>;
    echo: Subject<boolean>;
    canTraverse: Subject<boolean>;
    tilesContexts: {
        [name: string]: BehaviorSubject<Target>;
    };
    tileUpdates: Subject<{
        tile: string;
        target: Target;
    }>;
    private views;
    private lazy;
    private lazyModules;
    private tiles;
    constructor(location: Location, resolver: Resolver, marker: Marker, normalizer: Normalizer, ngResolver: ComponentFactoryResolver, compiler: Compiler, injector: Injector, prefix: BehaviorSubject<string>);
    traverse(path: string, navigate?: boolean): void;
    _traverse(path: string, navigate: boolean): void;
    traverseHere(includeHash?: boolean): void;
    addView(name: string, target: string, component: any): void;
    addLazyView(name: string, target: string, loader: LazyView): void;
    loadLazyView(moduleId: string, viewName: string, isTile?: boolean): Promise<Type<any>>;
    addTile(name: string, target: string, component: any): void;
    loadTile(name: string, path: string): void;
    emptyTile(name: string): void;
    addLazyTile(name: string, target: string, loader: LazyView): void;
    emitTarget(path: string, contextPath: string, queryString: string, viewOrTile: string, targetObs: BehaviorSubject<Target>, components: {
        [target: string]: any;
    }, isTile?: boolean, currentContext?: any): void;
    _emit(targetObs: BehaviorSubject<Target>, target: Target, viewOrTile: string, isTile: boolean): void;
    _resolve(path: string, view?: any, queryString?: string): Observable<any>;
    resolve(path: string, view?: any, queryString?: string): Observable<any>;
    getFullPath(path: string): string;
    getComponent(component: any): ComponentFactory<unknown>;
    getEmptyTarget(): Target;
    getQueryParams<T = string>(): Observable<{
        [key: string]: T;
    }>;
    getPrefix(): string;
    setPrefix(prefix: string): void;
}
