import CodeBox from "../code-box/CodeBox";
import CodeBoxOptions from "../code-box/CodeBoxOptions";
/**
 * Entry for a CodeBox created by code box creator along with the dataset of its corresponding root element.
 * @template T The type of code box.
 */
export type CodeBoxCreatorEntry<T extends CodeBox> = {
    /** Code box. */
    codeBox: T;
    /** Dataset of the root element of the code box. */
    rootElementDataset: DOMStringMap;
};
/**
 * Data for a code box created additionally.
 * @template T The type of code box.
 */
export type AdditionalCodeBoxInfo<T extends CodeBox> = {
    /** Created code box. */
    codeBox: T;
    /** Root element of created code box. */
    rootElement: HTMLElement;
};
/**
 * Manages the creation of code boxes.
 * @template T The type of code box.
 * @template U The type of code box options.
*/
declare abstract class CodeBoxCreator<T extends CodeBox, U extends CodeBoxOptions> {
    /** Created code boxes stored by their root element. */
    private createdCodeBoxes;
    /** Default code box options used, when no options are provided to the created method. */
    private defaultCodeBoxOptions;
    /**
     * Creates new code box creator.
     * @param defaultCodeBoxOptions Default code box options to be used, when no options are provided to the create method.
     */
    constructor(defaultCodeBoxOptions: U);
    /**
     * Creates code boxes based on the provided selector.
     * @param selector Selector used to find HTML elements to create code boxes from.
     * @param codeBoxOptions The options to be used, when creating code boxes. Defaults to the internal default options (provided to constructor).
     * @returns Number of created code boxes.
     */
    create(selector: string, codeBoxOptions?: U): number;
    /**
     * Returns created code box by id.
     * @param id Id of created code box.
     * @returns Code box (or null if code box was not found).
     */
    abstract getCreatedCodeBoxById(id: string): T | null;
    /**
     * Returns all created code boxes along with the dataset of their root elements.
     * @returns An array of objects, each containing a created code box and the dataset of its root element.
     */
    getCreatedCodeBoxes(): CodeBoxCreatorEntry<T>[];
    /**
     * Returns the number of created code boxes.
     * @returns The number of created code boxes.
     */
    getCreatedCodeBoxesCount(): number;
    /**
     * Creates new code box.
     * @param element Element from which to create code box.
     * @param codeBoxOptions Options to use when creating code box.
     * @returns Created code box, or null if code box could not be created.
     */
    protected abstract createCodeBox(element: HTMLElement, codeBoxOptions: U): T | null;
    /**
     * Returns additionally created code boxes. This method is called at the end of create method after createCodeBox method has been called for all elements obtained by the selector.
     * @param codeBoxOptions Options to be used when creating code boxes.
     * @returns Data for code boxes created additionally.
     */
    protected getAdditionallyCreatedCodeBoxes(codeBoxOptions: U): AdditionalCodeBoxInfo<T>[];
    /**
     * Returns copy of code box options.
     * @param codeBoxOptions Code box options.
     * @returns Copy of code box options.
     */
    protected abstract createCodeBoxOptionsCopy(codeBoxOptions: U): U;
}
export default CodeBoxCreator;
