import { DraftAssistant } from "./DraftAssistant";
import { RulesBroken } from "../rule";
import type { LabelId, LabeledRule } from "../rule";
import type { ModelFromContainer, AssistantsIn } from "../types";
/**
 * @category Supporting types
 */
export type CreationClosure<Model, ComposedModels extends unknown[]> = (...models: ComposedModels) => Model;
/**
 * Assists in the creation of complex models by coordinating multiple inner `DraftAssistant`.
 *
 * It uses a {@link CreationClosure} function to combine the models created by its
 * assistants into a single composed model.
 *
 * @template ComposedModels - An array of types representing the types of the models created by the inner assistants,
 * in the same order as the `assistants` array.
 *
 * @category Draft assistants
 */
export declare class SectionDraftAssistant<Model = any, ContainerModel = any, ComposedModels extends unknown[] = any[]> extends DraftAssistant<Model, ContainerModel> {
    protected assistants: AssistantsIn<ComposedModels, Model>;
    protected creationClosure: CreationClosure<Model, ComposedModels>;
    static with<Model = any, ContainerModel = any, ComposedModels extends unknown[] = any[]>(assistants: AssistantsIn<ComposedModels, Model>, creationClosure: CreationClosure<Model, ComposedModels>, modelFromContainer: ModelFromContainer<Model, ContainerModel>, assertionIds: LabelId[]): SectionDraftAssistant<Model, ContainerModel, ComposedModels>;
    static topLevelContainerWith<Model = any, ComposedModels extends unknown[] = any[]>(assistants: AssistantsIn<ComposedModels, Model>, creationClosure: CreationClosure<Model, ComposedModels>, assertionIds?: LabelId[]): SectionDraftAssistant<Model, unknown, ComposedModels>;
    constructor(assistants: AssistantsIn<ComposedModels, Model>, creationClosure: CreationClosure<Model, ComposedModels>, modelFromContainer: ModelFromContainer<Model, ContainerModel>, assertionIds: LabelId[]);
    createModel(): Model;
    setModel(newModel: Model): void;
    resetModel(): void;
    /**
     * @category Error handling
     */
    handleError(possibleCreateModelError: unknown): void;
    /**
     * @category Error handling
     */
    routeBrokenRulesOf(aRulesBrokenError: RulesBroken): void;
    /**
     * @category Error handling
     */
    routeBrokenRule(brokenRule: LabeledRule): void;
    protected routeNotHandledByThisBrokenRule(brokenRule: LabeledRule): void;
    protected addBrokenRuleToAll(assistantsHandlingAssertion: DraftAssistant<unknown, Model>[], brokenRule: LabeledRule): void;
    protected assistantsHandling(assertion: LabeledRule): DraftAssistant<unknown, Model>[];
    protected createComposedModels(): ComposedModels;
}
//# sourceMappingURL=SectionDraftAssistant.d.ts.map