/** @packageDocumentation
 * @module Elements
 */
import { Id64String } from "@itwin/core-bentley";
import { FunctionalElementProps, InformationPartitionElementProps, ModelProps, RelatedElement, TypeDefinitionElementProps } from "@itwin/core-common";
import { InformationPartitionElement, RoleElement, TypeDefinitionElement } from "../Element";
import { IModelDb } from "../IModelDb";
import { RoleModel } from "../Model";
import { DrawingGraphicRepresentsElement, ElementRefersToElements } from "../Relationship";
import { EditTxn } from "../EditTxn";
/** A FunctionalPartition element is a key part of the iModel information hierarchy and is always parented
 * to a Subject and broken down by a FunctionalModel.
 * @public
 */
export declare class FunctionalPartition extends InformationPartitionElement {
    static get className(): string;
    protected constructor(props: InformationPartitionElementProps, iModel: IModelDb);
}
/** A container for persisting FunctionalElements.
 * @public
 */
export declare class FunctionalModel extends RoleModel {
    static get className(): string;
    constructor(props: ModelProps, iModel: IModelDb);
    /** Insert a FunctionalPartition and a FunctionalModel that breaks it down using an explicit transaction.
    * @param txn The EditTxn used to perform inserts.
     * @param parentSubjectId The FunctionalPartition will be inserted as a child of this Subject element.
     * @param name The name of the FunctionalPartition that the new FunctionalModel will break down.
     * @returns The Id of the newly inserted FunctionalPartition and FunctionalModel (same value).
     * @throws [[IModelError]] if there is an insert problem.
     * @beta
     */
    static insert(txn: EditTxn, parentSubjectId: Id64String, name: string): Id64String;
    /** @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use FunctionalModel.insert(txn, ...) instead, within an explicit EditTxn scope (or via withEditTxn). See EditTxn documentation for migration help. */
    static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string): Id64String;
}
/** A FunctionalElement captures functional requirements that will ultimately be fulfilled by a PhysicalElement.
 * @public
 */
export declare abstract class FunctionalElement extends RoleElement {
    static get className(): string;
    protected constructor(props: FunctionalElementProps, iModel: IModelDb);
}
/** A FunctionalBreakdownElement is a *folder* node in the functional hierarchy.
 * @public
 */
export declare abstract class FunctionalBreakdownElement extends FunctionalElement {
    static get className(): string;
    protected constructor(props: FunctionalElementProps, iModel: IModelDb);
}
/** @public */
export declare class FunctionalComposite extends FunctionalBreakdownElement {
    static get className(): string;
    protected constructor(props: FunctionalElementProps, iModel: IModelDb);
}
/** A FunctionalComponentElement is a *leaf* node in the functional hierarchy.
 * @public
 */
export declare abstract class FunctionalComponentElement extends FunctionalElement {
    static get className(): string;
    protected constructor(props: FunctionalElementProps, iModel: IModelDb);
}
/** Defines a set of properties (the 'type') that can be associated with a Functional Element.
 * @public
 */
export declare abstract class FunctionalType extends TypeDefinitionElement {
    static get className(): string;
    protected constructor(props: TypeDefinitionElementProps, iModel: IModelDb);
}
/** Relates a [[FunctionalElement]] to its [[FunctionalType]]
 * @public
 */
export declare class FunctionalElementIsOfType extends RelatedElement {
    static get className(): string;
    static classFullName: string;
    constructor(id: Id64String, relClassName?: string);
}
/** Relates a [[PhysicalElement]] to the [[FunctionalElement]] elements that it fulfills.
 * @public
 */
export declare class PhysicalElementFulfillsFunction extends ElementRefersToElements {
    static get className(): string;
}
/** Relates a [[DrawingGraphic]] to the [[FunctionalElement]] that it represents
 * @public
 */
export declare class DrawingGraphicRepresentsFunctionalElement extends DrawingGraphicRepresentsElement {
    static get className(): string;
}
//# sourceMappingURL=FunctionalElements.d.ts.map