import type { MaybePromise, Event, Newable, Disposable } from '@difizen/mana-common';
import { DisposableCollection } from '@difizen/mana-common';
import { Emitter } from '@difizen/mana-common';
import type { Contribution } from '@difizen/mana-syringe';
import { DebugService } from '../common/debug';
import type { ManaContext } from '../module';
import type { ViewPreference, View } from './view-protocol';
import type { SlotView } from './view-protocol';
import { ViewFactory, ViewPreferenceContribution } from './view-protocol';
export interface ViewCreateOptions {
    factoryId: string;
    options?: any;
}
export interface ViewEvent {
    readonly view: View;
    readonly factoryId: string;
}
/**
 * 管理视图
 * 为视图保存创建条件
 */
export declare class ViewManager implements Disposable {
    root?: View;
    protected factoryMap?: Map<string, ViewFactory> | undefined;
    protected factories: string[];
    protected preferenceMap?: Map<string, ViewPreference> | undefined;
    protected preferences: string[];
    protected readonly viewContextMap: Map<View, ManaContext>;
    protected readonly viewFactoryMap: Map<View, string>;
    protected readonly views: Map<string, View>;
    protected readonly viewPromises: Map<string, MaybePromise<View>>;
    protected readonly pendingViewPromises: Map<string, MaybePromise<View>>;
    protected readonly onWillCreateViewEmitter: Emitter<ViewEvent>;
    readonly onWillCreateView: Event<ViewEvent>;
    protected readonly onDidCreateViewEmitter: Emitter<ViewEvent>;
    readonly onDidCreateView: Event<ViewEvent>;
    readonly toDispose: DisposableCollection;
    protected readonly factoryProvider: Contribution.Provider<ViewFactory>;
    protected readonly debugService: DebugService;
    protected readonly preferenceProvider: Contribution.Provider<ViewPreferenceContribution>;
    disposed?: boolean | undefined;
    constructor(factoryProvider: Contribution.Provider<ViewFactory>, debugService: DebugService, preferenceProvider: Contribution.Provider<ViewPreferenceContribution>);
    dispose(): void;
    getFactoryMap(): Map<string, ViewFactory>;
    toFactoryId(view: Newable<View> | string): string;
    getPreferenceMap(): Map<string, ViewPreference>;
    toKey(options: ViewCreateOptions): string;
    fromKey(key: string): ViewCreateOptions;
    getView<T extends View>(factoryOrView: string | Newable<View>, options?: any): MaybePromise<T> | undefined;
    getViewByKey(key: string): MaybePromise<View> | undefined;
    getViews<T extends View>(factoryId: string): Promise<T[]>;
    protected doGetView<T extends View>(key: string): MaybePromise<T> | undefined;
    getFactory(view: Newable<View> | Newable<SlotView>): ViewFactory | undefined;
    getPrefer(factoryId: string): ViewPreference | undefined;
    getFactoryIdByView(view: View): string | undefined;
    getViewOption(view: View): any;
    setViewContext(view: View, context: ManaContext): void;
    getViewContext(view: View): ManaContext;
    removeViewContext(view: View): void;
    getViewKey(view: View): string | undefined;
    protected mergeViewOption(options?: Record<any, any>, preference?: ViewPreference): {
        [x: string]: any;
    } | undefined;
    getOrCreateView<T extends View, U extends Record<any, any> = any>(factoryOrView: string | Newable<T>, options?: U): Promise<T>;
}
//# sourceMappingURL=view-manager.d.ts.map