import { ModelDelegateImpl } from './model-delegate';
import * as elements from './interfaces';
import * as classes from './classes';
export declare abstract class ElementBuilderBase<TElement extends elements.Element> {
    protected element: TElement;
    protected modelDelegate: ModelDelegateImpl;
    private elementMap;
    constructor(element: TElement, modelDelegate: ModelDelegateImpl);
    protected addToElementMap(element: elements.Element): void;
}
export declare class PropertyBuilder extends ElementBuilderBase<classes.Property> {
    constructor(element: classes.Property, modelDelegate: ModelDelegateImpl);
}
export declare class MemberedClassifierBuilder extends ElementBuilderBase<elements.MemberedClassifier> {
    constructor(element: elements.MemberedClassifier, modelDelegate: ModelDelegateImpl);
    addAttribute(properties: {
        name: string;
        id?: string;
    }, initFn?: (attribute: PropertyBuilder) => void): this;
}
export declare class InterfaceBuilder extends MemberedClassifierBuilder {
    constructor(element: classes.Interface, modelDelegate: ModelDelegateImpl);
}
export declare class ClassBuilder extends MemberedClassifierBuilder {
    constructor(element: classes.Class, modelDelegate: ModelDelegateImpl);
}
export declare class PackageBuilder extends ElementBuilderBase<elements.Package> {
    constructor(element: classes.Package, modelDelegate: ModelDelegateImpl);
    addClass(properties: {
        name: string;
        id?: string;
    }, initFn?: (cls: ClassBuilder) => void): this;
    private createPackageableElement;
}
export declare class ModelBuilder extends PackageBuilder {
    private model;
    private constructor();
    static create(name: string): ModelBuilder;
    build(): elements.Model;
}
