/**
 * AlTemplateIndexService provides a central storage facility for templates which are projected across/outside
 * of component hierarchies.  While intended to be used directly in markup using the `alTemplate` directive, it can
 * also be interacted with programmatically.  See `al-template`'s [README.md](../directives/README.md) for more information.
 *
 * @copyright Alert Logic, Inc 2022
 * @author McNielsen <knielsen@alertlogic.com>
 */
import { TemplateRef, EventEmitter } from '@angular/core';
import { Subscription } from 'rxjs';
import * as i0 from "@angular/core";
declare type TemplateDictionary = {
    [templateId: string]: TemplateRef<any>;
};
interface TemplateCategory {
    templates: TemplateDictionary;
    emitter: EventEmitter<TemplateDictionary>;
}
export declare class AlTemplateIndexService {
    protected categories: {
        [categoryId: string]: TemplateCategory;
    };
    constructor();
    /**
     * Publishes a template within a specific category and fires its change emitter.
     *
     * @categoryId The template's category, which should be a reference to its feature (e.g., "navigation", "header", etc.)
     * @templateId The identifier for the template (e.g., "aboveLogo" or "afterFooter")
     * @template The TemplateRef.
     */
    publish(categoryId: string, templateId: string, template: TemplateRef<any>): void;
    /**
     * Retracts a template from a given category and fires its change emitter.
     *
     * @categoryId The template's category, which should be a reference to its feature (e.g., "navigation", "header", etc.)
     * @templateId The identifier for the template (e.g., "aboveLogo" or "afterFooter")
     */
    retract(categoryId: string, templateId: string): void;
    /**
     * Retrieves a template associated with a given category and template identifier.
     */
    getTemplate(categoryId: string, templateId: string): TemplateRef<any> | undefined;
    /**
     * Retrieves the EventEmitter for a given category.
     */
    getEmitter(categoryId: string): EventEmitter<TemplateDictionary>;
    /**
     * Listens for changes to a given category.
     */
    listen(categoryId: string, handler: {
        (templates: TemplateDictionary): void;
    }): Subscription;
    protected getCategory(categoryId: string): TemplateCategory;
    static ɵfac: i0.ɵɵFactoryDef<AlTemplateIndexService, never>;
    static ɵprov: i0.ɵɵInjectableDef<AlTemplateIndexService>;
}
export {};
