import { INamedObject } from "../../../INamedObject.js";
import { Node } from "../../../NodeSystem/Node.js";
import { Category } from "../../../Options/Category.js";
import { Option } from "../../../Options/Option.js";
import { ILocalizationInstruction } from "../Globalization/ILocalizationInstruction.js";
import { NodeSystemInstruction } from "../NodeSystem/NodeSystemInstruction.js";
import { IOptionInstruction } from "./IOptionInstruction.js";
import { IOptionInstructionOptions } from "./IOptionInstructionOptions.js";
/**
 * Represents an instruction which provides options.
 *
 * @template TCategory
 * The type of the categories.
 *
 * @template TCategoryOptions
 * The type of the options for generating categories.
 *
 * @template TOption
 * The type of the options.
 *
 * @template TOptionOptions
 * The type of the data for generating options.
 */
export declare abstract class OptionInstruction<TCategory extends Category<TOption, TOptionOptions>, TCategoryOptions, TOption extends Option, TOptionOptions> extends NodeSystemInstruction<TCategory, TCategoryOptions> implements IOptionInstruction<TCategory, TOption>, ILocalizationInstruction {
    /**
     * The categories to delete.
     */
    private categoriesToDelete;
    /**
     * The options to delete.
     */
    private optionsToDelete;
    /**
     * The path to save the translations to. Gets the path to save the translations to.
     */
    private translationDirectory;
    /**
     * Initializes a new instance of the {@link OptionInstruction `OptionInstruction<TCategory, TCategoryOptions, TOption, TOptionOptions>`} class.
     *
     * @param options
     * The options of the option-instruction.
     *
     * @param generator
     * A component for creating categories.
     */
    constructor(options: IOptionInstructionOptions<TCategoryOptions>, generator: (node: Node<TCategory, TCategoryOptions>, options: TCategoryOptions) => TCategory);
    /**
     * @inheritdoc
     */
    get TranslationDirectory(): string;
    /**
     * @inheritdoc
     */
    set TranslationDirectory(value: string);
    /**
     * @inheritdoc
     */
    abstract get RootCategory(): string;
    /**
     * @inheritdoc
     */
    get OptionCategory(): string;
    /**
     * @inheritdoc
     */
    get CategoryCategory(): string;
    /**
     * @inheritdoc
     */
    get CategoriesToDelete(): INamedObject[];
    /**
     * @inheritdoc
     */
    get OptionsToDelete(): INamedObject[];
    /**
     * @inheritdoc
     *
     * @returns
     * The messages of the options-instruction.
     */
    GetMessages(): Record<string, Record<string, Record<string, string>>>;
}
