import { Extension } from '../core/extension';
import { Translatable } from '../l10n';
import { ToolbarItemType } from '../toolbar';
import { ResolvedParams } from '../utils';
import { InitializerType, LayerBuilderType } from '../viewer';
export { ToolbarItemType };
export type PluginType = (Plugin | (new (params?: any) => Plugin));
export declare abstract class Plugin<T = any> extends Extension implements Translatable {
    private _name?;
    protected abortController?: AbortController;
    protected initializers: InitializerType[];
    protected layerBuilders: LayerBuilderType[];
    private _initializers;
    private _layerBuilders;
    private _resolvedParams?;
    readonly params: { [K in keyof T]: T[K] extends infer T_1 ? T_1 extends T[K] ? T_1 extends import('../utils').Resolveable<infer U> ? Promise<U> : T_1 : never : never; } | undefined;
    constructor(params?: ResolvedParams<T>);
    get name(): string;
    get signal(): AbortSignal | undefined;
    get resolvedParams(): T | undefined;
    get translator(): {
        translate: (key: string, options?: object) => string;
    };
    translate(key: string, options?: object): string;
    protected init(): Promise<void> | void;
    protected onLoad(_resolvedParams?: T): Promise<void> | void;
    protected destroy(): Promise<void> | void;
    protected getToolbarItems(): Map<string, ToolbarItemType> | Promise<Map<string, ToolbarItemType>>;
    protected getInitializers(): InitializerType[] | Promise<InitializerType[]>;
    protected getLayerBuilders(): LayerBuilderType[] | Promise<LayerBuilderType[]>;
    initialize(): Promise<void>;
    load(): Promise<void>;
    terminate(): Promise<void>;
}
