/** @packageDocumentation
 * @module Elements
 */
import { GuidString, Id64String } from "@itwin/core-bentley";
import { AxisAlignedBox3d, Code, CodeScopeProps, ConcreteEntityTypes, DefinitionElementProps, DrawingProps, ElementAlignedBox3d, ElementProps, EntityMetaData, EntityReferenceSet, GeometricElement2dProps, GeometricElement3dProps, GeometricElementProps, GeometryPartProps, GeometryStreamProps, InformationPartitionElementProps, LineStyleProps, ModelProps, PhysicalElementProps, PhysicalTypeProps, Placement2d, Placement3d, RelatedElement, RenderSchedule, RenderTimelineProps, RepositoryLinkProps, SectionDrawingLocationProps, SectionDrawingProps, SectionType, SheetBorderTemplateProps, SheetProps, SheetTemplateProps, SubjectProps, TypeDefinition, TypeDefinitionElementProps, UrlLinkProps } from "@itwin/core-common";
import { ClipVector, Transform } from "@itwin/core-geometry";
import { CustomHandledProperty, DeserializeEntityArgs, ECSqlRow, Entity } from "./Entity";
import { IModelDb } from "./IModelDb";
import { IModelElementCloneContext } from "./IModelElementCloneContext";
import { EntityClass } from "@itwin/ecschema-metadata";
/** Argument for the `Element.onXxx` static methods
 * @beta
 */
export interface OnElementArg {
    /** The iModel for the Element affected by this method. */
    iModel: IModelDb;
}
/** Argument for `Element.onInsert` and `Element.onUpdate` static methods.
 * @beta
 */
export interface OnElementPropsArg extends OnElementArg {
    /** The properties of the Element affected by this method.
     * @note the properties may be modified. If so the modified values will be inserted/updated.
     */
    props: ElementProps;
}
/** Argument for the `Element.onXxx` static methods that notify of operations to an existing Element supplying its Id, ModelId and FederationGuid.
 * @beta
 */
export interface OnElementIdArg extends OnElementArg {
    /** The Id of the Element affected by this method */
    id: Id64String;
    /** The ModelId of the element affected by this method */
    model: Id64String;
    /** The federationGuid of the element affected by this method */
    federationGuid: GuidString;
}
/** Argument for the `Element.onChildXxx` static methods
 * @beta
 */
export interface OnChildElementArg extends OnElementArg {
    parentId: Id64String;
}
/** Argument for the `Element.onChildXxx` static methods that supply the properties of the child Element to be inserted or updated.
 * @beta
 */
export interface OnChildElementPropsArg extends OnChildElementArg {
    /** The new properties of the child Element for this method. */
    childProps: Readonly<ElementProps>;
}
/** Argument for the `Element.onChildXxx` static methods that only supply the Id of the child Element.
 * @beta
 */
export interface OnChildElementIdArg extends OnChildElementArg {
    /** The Id of the child element for this method */
    childId: Id64String;
}
/** Argument for the `Element.onSubModelInsert` static method
 * @beta
 */
export interface OnSubModelPropsArg extends OnElementArg {
    /** The properties of the prospective sub-model */
    subModelProps: ModelProps;
}
/** Argument for several `Element.onSubModelXxx` static methods
 * @beta
 */
export interface OnSubModelIdArg extends OnElementArg {
    /** The modelId of the sub Model */
    subModelId: Id64String;
}
/** The smallest individually identifiable building block for modeling the real world in an iModel.
 * Each element represents an [[Entity]] in the real world. Sets of Elements (contained in [[Model]]s) are used to model
 * other Elements that represent larger scale real world entities. Using this recursive modeling strategy,
 * Elements can represent entities at any scale. Elements can represent physical things or abstract concepts
 * or simply be information records.
 *
 * Every Element has a 64-bit id (inherited from Entity) that uniquely identifies it within an iModel. Every Element also
 * has a [[code]] that identifies its meaning in the real world. Additionally, Elements may have a [[federationGuid]]
 * to hold a GUID, if the element was assigned that GUID by some other federated database. The iModel database enforces
 * uniqueness of id, code, and federationGuid.
 *
 * The Element class provides `static` methods like [[onInsert]], [[onUpdated]], [[onCloned]], and [[onChildAdded]] that enable
 * it to customize persistence operations. For example, the base implementations of [[onInsert]], [[onUpdate]], and [[onDelete]]
 * validate that the appropriate [locks]($docs/learning/backend/ConcurrencyControl.md), [codes]($docs/learning/backend/CodeService.md),
 * and [channel permissions]($docs/learning/backend/Channel.md) are obtained before a change to the element is written to the iModel.
 * A subclass of Element that overrides any of these methods **must** call the `super` method as well. An application that supplies its
 * own Element subclasses should register them at startup via [[ClassRegistry.registerModule]] or [[ClassRegistry.register]].
 *
 * See:
 * * [Element Fundamentals]($docs/bis/guide/fundamentals/element-fundamentals.md)
 * * [Working with schemas and elements in TypeScript]($docs/learning/backend/SchemasAndElementsInTypeScript.md)
 * * [Creating elements]($docs/learning/backend/CreateElements.md)
 * @public @preview
 */
export declare class Element extends Entity {
    static get className(): string;
    /** @internal */
    static get protectedOperations(): string[];
    /** The ModelId of the [Model]($docs/bis/guide/fundamentals/model-fundamentals.md) containing this element */
    readonly model: Id64String;
    /** The [Code]($docs/bis/guide/fundamentals/codes.md) for this element */
    code: Code;
    /** The parent element, if present, of this element. */
    parent?: RelatedElement;
    /** A [FederationGuid]($docs/bis/guide/fundamentals/element-fundamentals.md#federationguid) assigned to this element by some other federated database */
    federationGuid?: GuidString;
    /** A [user-assigned label]($docs/bis/guide/fundamentals/element-fundamentals.md#userlabel) for this element. */
    userLabel?: string;
    /** Optional [json properties]($docs/bis/guide/fundamentals/element-fundamentals.md#jsonproperties) of this element. */
    readonly jsonProperties: {
        [key: string]: any;
    };
    protected constructor(props: ElementProps, iModel: IModelDb);
    /**
     * Element custom HandledProps include 'codeValue', 'codeSpec', 'codeScope', 'model', 'parent', 'federationGuid', and 'lastMod'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * Element deserializes 'codeValue', 'codeSpec', 'codeScope', 'model', 'parent', and 'federationGuid'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): ElementProps;
    /**
     * Element serialize 'codeValue', 'codeSpec', 'codeScope', 'model', 'parent', and 'federationGuid'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: ElementProps, iModel: IModelDb): ECSqlRow;
    /** Called before a new Element is inserted.
     * @note throw an exception to disallow the insert
     * @note If you override this method, you must call super.
     * @note `this` is the class of the Element to be inserted
     * @beta
     */
    protected static onInsert(arg: OnElementPropsArg): void;
    /** Called after a new Element was inserted.
     * @note If you override this method, you must call super.
     * @note `this` is the class of the Element that was inserted
     * @beta
     */
    protected static onInserted(arg: OnElementIdArg): void;
    /** Called before an Element is updated.
     * @note throw an exception to disallow the update
     * @note If you override this method, you must call super.
     * @note `this` is the class of the Element to be updated
     * @beta
     */
    protected static onUpdate(arg: OnElementPropsArg): void;
    /** Called after an Element was updated.
     * @note If you override this method, you must call super.
     * @note `this` is the class of the Element that was updated
     * @beta
     */
    protected static onUpdated(arg: OnElementIdArg): void;
    /** Called before an Element is deleted.
     * @note throw an exception to disallow the delete
     * @note If you override this method, you must call super.
     * @note `this` is the class of the Element to be deleted
     * @beta
     */
    protected static onDelete(arg: OnElementIdArg): void;
    /** Called after an Element was deleted.
     * @note If you override this method, you must call super.
     * @note `this` is the class of the Element that was deleted
     * @beta
     */
    protected static onDeleted(arg: OnElementIdArg): void;
    /** Called when an element with an instance of this class as its parent is about to be deleted.
     * @note throw an exception if the element should not be deleted
     * @note implementers should not presume that the element was deleted if this method does not throw,
     * since the delete may fail for other reasons. Instead, rely on [[onChildDeleted]] for that purpose.
     * @note `this` is the class of the parent Element whose child will be deleted
     * @beta
     */
    protected static onChildDelete(_arg: OnChildElementIdArg): void;
    /** Called after an element with an instance of this class as its parent was successfully deleted.
     * @note `this` is the class of the parent Element whose child was deleted
     * @beta
     */
    protected static onChildDeleted(arg: OnChildElementIdArg): void;
    /** Called when a *new element* with an instance of this class as its parent is about to be inserted.
     * @note throw an exception if the element should not be inserted
     * @note `this` is the class of the prospective parent Element.
     * @beta
     */
    protected static onChildInsert(_arg: OnChildElementPropsArg): void;
    /** Called after a *new element* with an instance of this class as its parent was inserted.
     * @note `this` is the class of the parent Element.
     * @beta
     */
    protected static onChildInserted(arg: OnChildElementIdArg): void;
    /** Called when an element with an instance of this class as its parent is about to be updated.
     * @note throw an exception if the element should not be updated
     * @note `this` is the class of the parent Element.
     * @beta
     */
    protected static onChildUpdate(_arg: OnChildElementPropsArg): void;
    /** Called after an element with an instance of this the class as its parent was updated.
     * @note `this` is the class of the parent Element.
     * @beta
     */
    protected static onChildUpdated(arg: OnChildElementIdArg): void;
    /** Called when an *existing element* is about to be updated so that an instance of this class will become its new parent.
     * @note throw an exception if the element should not be added
     * @note `this` is the class of the prospective parent Element.
     * @beta
     */
    protected static onChildAdd(_arg: OnChildElementPropsArg): void;
    /** Called after an *existing element* has been updated so that an instance of this class is its new parent.
     * @note `this` is the class of the new parent Element.
     * @beta
     */
    protected static onChildAdded(arg: OnChildElementIdArg): void;
    /** Called when an element with an instance of this class as its parent is about to be updated change to a different parent.
     * @note throw an exception if the element should not be dropped
     * @note `this` is the class of the parent Element.
     * @beta
     */
    protected static onChildDrop(_arg: OnChildElementIdArg): void;
    /** Called after an element with an instance of this class as its previous parent was updated to have a new parent.
     * @note `this` is the class of the previous parent Element.
     * @beta
     */
    protected static onChildDropped(arg: OnChildElementIdArg): void;
    /** Called when an instance of this class is being *sub-modeled* by a new Model.
     * @note throw an exception if model should not be inserted
     * @note `this` is the class of Element to be sub-modeled.
     * @beta
     */
    protected static onSubModelInsert(_arg: OnSubModelPropsArg): void;
    /** Called after an instance of this class was *sub-modeled* by a new Model.
     * @note `this` is the class of Element that is now sub-modeled.
     * @beta
     */
    protected static onSubModelInserted(arg: OnSubModelIdArg): void;
    /** Called when a sub-model of an instance of this class is being deleted.
     * @note throw an exception if model should not be deleted
     * @note `this` is the class of Element that is sub-modeled.
     * @beta
     */
    protected static onSubModelDelete(_arg: OnSubModelIdArg): void;
    /** Called after a sub-model of an instance of this class was deleted.
     * @note `this` is the class of Element that was sub-modeled.
     * @beta
     */
    protected static onSubModelDeleted(arg: OnSubModelIdArg): void;
    /** Called during the iModel transformation process after an Element from the source iModel was *cloned* for the target iModel.
     * The transformation process automatically handles remapping BisCore properties and those that are properly described in ECSchema.
     * This callback is only meant to be overridden if there are other Ids in non-standard locations that need to be remapped or other data that needs to be fixed up after the clone.
     * @param _context The context that persists any remapping between the source iModel and target iModel.
     * @param _sourceProps The ElementProps for the source Element that was cloned.
     * @param _targetProps The ElementProps that are a result of the clone. These can be further modified.
     * @note If you override this method, you must call super.
     * @beta
     */
    protected static onCloned(_context: IModelElementCloneContext, _sourceProps: ElementProps, _targetProps: ElementProps): void;
    /** Called when a *root* element in a subgraph is changed and before its outputs are processed.
     * This special callback is made when:
     * * the element is part of an [[ElementDrivesElement]] graph, and
     * * the element has no inputs, and
     * * none of the element's outputs have been processed.
     * @see [[ElementDrivesElement]] for more on element dependency graphs.
     * @beta
     */
    protected static onBeforeOutputsHandled(_id: Id64String, _iModel: IModelDb): void;
    /** Called on an element in a graph after all of its inputs have been processed and before its outputs are processed.
     * This callback is made when:
     * * the specified element is part of an [[ElementDrivesElement]] graph, and
     * * there was a direct change to some element upstream in the dependency graph.
     * * all upstream elements in the graph have been processed.
     * * none of the downstream elements have been processed.
     * This method is not called if none of the element's inputs were changed.
     * @see [[ElementDrivesElement]] for more on element dependency graphs.
     * @beta
     */
    protected static onAllInputsHandled(_id: Id64String, _iModel: IModelDb): void;
    toJSON(): ElementProps;
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
    /** A *required reference* is an element that had to be inserted before this element could have been inserted.
     * This is the list of property keys on this element that store references to those elements
     * @note This should be overridden (with `super` called) at each level of the class hierarchy that introduces required references.
     * @note any property listed here must be added to the reference ids in [[collectReferenceIds]]
     * @beta
     */
    static readonly requiredReferenceKeys: ReadonlyArray<string>;
    /** A map of every [[requiredReferenceKeys]] on this class to their entity type.
     * @note This should be overridden (with `super` called) at each level of the class hierarchy that introduces required references.
     * @alpha
     */
    static readonly requiredReferenceKeyTypeMap: Record<string, ConcreteEntityTypes>;
    /** Get the class metadata for this element.
     * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getMetaData` provided by the parent class `Entity` instead.
     *
     * @example
     * ```typescript
     * // Current usage:
     * const metaData: EntityMetaData | undefined = element.getClassMetaData();
     *
     * // Replacement:
     * const metaData: EntityClass = await element.getMetaData();
     * ```
     */
    getClassMetaData(): EntityMetaData | undefined;
    /** Query metadata for this entity class from the iModel's schema. Returns cached metadata if available.*/
    getMetaData(): Promise<EntityClass>;
    private getAllUserProperties;
    /** Get a set of JSON user properties by namespace */
    getUserProperties(namespace: string): any;
    /** Change a set of user JSON properties of this Element by namespace. */
    setUserProperties(nameSpace: string, value: any): void;
    /** Remove a set of JSON user properties, specified by namespace, from this Element */
    removeUserProperties(nameSpace: string): void;
    /** Get a JSON property of this element, by namespace */
    getJsonProperty(nameSpace: string): any;
    setJsonProperty(nameSpace: string, value: any): void;
    /** Get a display label for this Element. By default returns userLabel if present, otherwise code value. */
    getDisplayLabel(): string;
    /** Get a list of HTML strings that describe this Element for the tooltip. Strings will be listed on separate lines in the tooltip.
     * Any instances of the pattern `%{tag}` will be replaced by the localized value of tag.
     */
    getToolTipMessage(): string[];
    /**
     * Insert this Element into the iModel.
     * @see [[IModelDb.Elements.insertElement]]
     * @note For convenience, the value of `this.id` is updated to reflect the resultant element's id.
     * However when `this.federationGuid` is not present or undefined, a new Guid will be generated and stored on the resultant element. But
     * the value of `this.federationGuid` is *not* updated. Generally, it is best to re-read the element after inserting (e.g. via [[IModelDb.Elements.getElement]])
     * if you intend to continue working with it. That will ensure its values reflect the persistent state.
     */
    insert(): string;
    /** Update this Element in the iModel. */
    update(): void;
    /** Delete this Element from the iModel. */
    delete(): void;
}
/** An abstract base class to model real world entities that intrinsically have geometry.
 * @public @preview
 */
export declare abstract class GeometricElement extends Element {
    static get className(): string;
    /** The Id of the [[Category]] for this GeometricElement. */
    category: Id64String;
    /** The GeometryStream for this GeometricElement. */
    geom?: GeometryStreamProps;
    /** The origin, orientation, and bounding box of this GeometricElement. */
    abstract get placement(): Placement2d | Placement3d;
    protected constructor(props: GeometricElementProps, iModel: IModelDb);
    /** Type guard for instanceof [[GeometricElement3d]] */
    is3d(): this is GeometricElement3d;
    /** Type guard for instanceof [[GeometricElement2d]] */
    is2d(): this is GeometricElement2d;
    /** Get the [Transform]($geometry) from the Placement of this GeometricElement */
    getPlacementTransform(): Transform;
    calculateRange3d(): AxisAlignedBox3d;
    toJSON(): GeometricElementProps;
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
    /** @beta */
    static readonly requiredReferenceKeys: ReadonlyArray<string>;
    /** @alpha */
    static readonly requiredReferenceKeyTypeMap: Record<string, ConcreteEntityTypes>;
    /**
     * GeometricElement custom HandledProps includes 'inSpatialIndex'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * GeometricElement deserializes 'inSpatialIndex'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): GeometricElementProps;
    /**
     * GeometricElement serialize 'inSpatialIndex'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: GeometricElementProps, iModel: IModelDb): ECSqlRow;
}
/** An abstract base class to model real world entities that intrinsically have 3d geometry.
 * See [how to create a GeometricElement3d]($docs/learning/backend/CreateElements.md#GeometricElement3d).
 * @public @preview
 */
export declare abstract class GeometricElement3d extends GeometricElement {
    static get className(): string;
    placement: Placement3d;
    typeDefinition?: TypeDefinition;
    protected constructor(props: GeometricElement3dProps, iModel: IModelDb);
    toJSON(): GeometricElement3dProps;
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
    /**
     * GeometricElement3d custom HandledProps includes 'category', 'geometryStream', 'origin', 'yaw', 'pitch', 'roll',
     * 'bBoxLow', 'bBoxHigh', and 'typeDefinition'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * GeometricElement3d deserializes 'category', 'geometryStream', 'origin', 'yaw', 'pitch', 'roll',
     * 'bBoxLow', 'bBoxHigh', and 'typeDefinition'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): GeometricElement3dProps;
    /**
     * GeometricElement3d serializes 'category', 'geometryStream', 'origin', 'yaw', 'pitch', 'roll',
     * 'bBoxLow', 'bBoxHigh', and 'typeDefinition'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: GeometricElement3dProps, iModel: IModelDb): ECSqlRow;
}
/** A 3d Graphical Element
 * @public @preview
 */
export declare abstract class GraphicalElement3d extends GeometricElement3d {
    static get className(): string;
    protected constructor(props: GeometricElement3dProps, iModel: IModelDb);
}
/** An abstract base class to model information entities that intrinsically have 2d geometry.
 * @public @preview
 */
export declare abstract class GeometricElement2d extends GeometricElement {
    static get className(): string;
    placement: Placement2d;
    typeDefinition?: TypeDefinition;
    protected constructor(props: GeometricElement2dProps, iModel: IModelDb);
    toJSON(): GeometricElement2dProps;
    /**
     * GeometricElement2d custom HandledProps includes 'category', 'geometryStream', 'origin', 'rotation',
     * 'bBoxLow', 'bBoxHigh', and 'typeDefinition'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * GeometricElement2d deserialize 'category', 'geometryStream', 'origin', 'rotation',
     * 'bBoxLow', 'bBoxHigh', and 'typeDefinition'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): GeometricElement2dProps;
    /**
     * GeometricElement2d serializes 'category', 'geometryStream', 'origin', 'rotation',
     * 'bBoxLow', 'bBoxHigh', and 'typeDefinition'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: GeometricElement2dProps, iModel: IModelDb): ECSqlRow;
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
}
/** An abstract base class for 2d Geometric Elements that are used to convey information within graphical presentations (like drawings).
 * @public @preview
 */
export declare abstract class GraphicalElement2d extends GeometricElement2d {
    static get className(): string;
    protected constructor(props: GeometricElement2dProps, iModel: IModelDb);
}
/** 2d element used to annotate drawings and sheets.
 * @public @preview
 */
export declare class AnnotationElement2d extends GraphicalElement2d {
    static get className(): string;
    protected constructor(props: GeometricElement2dProps, iModel: IModelDb);
}
/** 2d element used to persist graphics for use in drawings.
 * @public @preview
 */
export declare class DrawingGraphic extends GraphicalElement2d {
    static get className(): string;
    protected constructor(props: GeometricElement2dProps, iModel: IModelDb);
}
/** An Element that occupies real world space. Its coordinates are in the project space of its iModel.
 * @public @preview
 */
export declare abstract class SpatialElement extends GeometricElement3d {
    static get className(): string;
    protected constructor(props: GeometricElement3dProps, iModel: IModelDb);
}
/** An Element that is spatially located, has mass, and can be *touched*.
 * @public @preview
 */
export declare abstract class PhysicalElement extends SpatialElement {
    static get className(): string;
    /** If defined, the [[PhysicalMaterial]] that makes up this PhysicalElement. */
    physicalMaterial?: RelatedElement;
    protected constructor(props: PhysicalElementProps, iModel: IModelDb);
    toJSON(): PhysicalElementProps;
}
/** Identifies a *tracked* real world location but has no mass and cannot be *touched*.
 * @public @preview
 */
export declare abstract class SpatialLocationElement extends SpatialElement {
    static get className(): string;
    protected constructor(props: GeometricElement3dProps, iModel: IModelDb);
}
/** A Volume Element is a Spatial Location Element that is restricted to defining a volume.
 * @public @preview
 */
export declare class VolumeElement extends SpatialLocationElement {
    static get className(): string;
    protected constructor(props: GeometricElement3dProps, iModel: IModelDb);
}
/** A SectionDrawingLocation element identifies the location of a [[SectionDrawing]] in the context of a [[SpatialModel]],
 * enabling [HyperModeling]($hypermodeling).
 * @note The associated ECClass was added to the BisCore schema in version 1.0.11.
 * @public @preview
 */
export declare class SectionDrawingLocation extends SpatialLocationElement {
    /** The Id of the [[ViewDefinition]] to which this location refers. */
    sectionView: RelatedElement;
    static get className(): string;
    constructor(props: SectionDrawingLocationProps, iModel: IModelDb);
    toJSON(): SectionDrawingLocationProps;
}
/** Information Content Element is an abstract base class for modeling pure information entities. Only the
 * core framework should directly subclass from Information Content Element. Domain and application developers
 * should start with the most appropriate subclass of Information Content Element.
 * @public @preview
 */
export declare abstract class InformationContentElement extends Element {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
}
/** Element used in conjunction with bis:ElementDrivesElement relationships to bundle multiple inputs before
 * driving the output element.
 * @beta
 */
export declare abstract class DriverBundleElement extends InformationContentElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
}
/** Information Reference is an abstract base class for modeling entities whose main purpose is to reference something else.
 * @public @preview
 */
export declare abstract class InformationReferenceElement extends InformationContentElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
}
/** A Subject is an information element that describes what this repository (or part thereof) is about.
 * @public @preview
 */
export declare class Subject extends InformationReferenceElement {
    static get className(): string;
    description?: string;
    protected constructor(props: SubjectProps, iModel: IModelDb);
    toJSON(): SubjectProps;
    /** Create a Code for a Subject given a name that is meant to be unique within the scope of its parent Subject.
     * @param iModelDb The IModelDb
     * @param parentSubjectId The Id of the parent Subject that provides the scope for names of its child Subjects.
     * @param codeValue The child Subject name
     */
    static createCode(iModelDb: IModelDb, parentSubjectId: CodeScopeProps, codeValue: string): Code;
    /** Create a Subject
     * @param iModelDb The IModelDb
     * @param parentSubjectId The new Subject will be a child of this Subject
     * @param name The name (codeValue) of the Subject
     * @param description The optional description of the Subject
     * @returns The newly constructed Subject
     * @throws [[IModelError]] if there is a problem creating the Subject
     */
    static create(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, description?: string): Subject;
    /** Insert a Subject
     * @param iModelDb Insert into this IModelDb
     * @param parentSubjectId The new Subject will be inserted as a child of this Subject
     * @param name The name (codeValue) of the Subject
     * @param description The optional description of the Subject
     * @returns The Id of the newly inserted Subject
     * @throws [[IModelError]] if there is a problem inserting the Subject
     */
    static insert(iModelDb: IModelDb, parentSubjectId: Id64String, name: string, description?: string): Id64String;
}
/** An InformationContentElement that identifies the content of a document.
 * The realized form of a document is called a DocumentCarrier (different class than Document).
 * For example, a will is a legal document. The will published into a PDF file is an ElectronicDocumentCopy.
 * The will printed onto paper is a PrintedDocumentCopy.
 * In this example, the Document only identifies, names, and tracks the content of the will.
 * @public @preview
 */
export declare abstract class Document extends InformationContentElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
}
/** A document that represents a drawing, that is, a two-dimensional graphical representation of engineering data. A Drawing element is usually modelled by a [[DrawingModel]].
 * @public @preview
 */
export declare class Drawing extends Document {
    private _scaleFactor;
    /** A factor used by tools to adjust the size of text in [GeometricElement2d]($backend)s in the associated [DrawingModel]($backend) and to compute the
     * size of the [ViewAttachment]($backend) created when attaching the [Drawing]($backend) to a [Sheet]($backend).
     * Default: 1.
     * @note Attempting to set this property to a value less than or equal to zero will produce an exception.
     * @public @preview
     */
    get scaleFactor(): number;
    set scaleFactor(factor: number);
    static get className(): string;
    protected constructor(props: DrawingProps, iModel: IModelDb);
    toJSON(): DrawingProps;
    /** The name of the DrawingModel class modeled by this element type. */
    protected static get drawingModelFullClassName(): string;
    /** Create a Code for a Drawing given a name that is meant to be unique within the scope of the specified DocumentListModel.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the DocumentListModel that contains the Drawing and provides the scope for its name.
     * @param codeValue The Drawing name
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
    /** Insert a Drawing element and a DrawingModel that breaks it down.
     * @param iModelDb Insert into this iModel
     * @param documentListModelId Insert the new Drawing into this DocumentListModel
     * @param name The name of the Drawing.
     * @param scaleFactor See [[scaleFactor]]. Must be greater than zero.
     * @returns The Id of the newly inserted Drawing element and the DrawingModel that breaks it down (same value).
     * @throws [[IModelError]] if unable to insert the element.
     * @throws Error if `scaleFactor` is less than or equal to zero.
     */
    static insert(iModelDb: IModelDb, documentListModelId: Id64String, name: string, scaleFactor?: number): Id64String;
}
/** A document that represents a section drawing, that is, a graphical documentation derived from a planar
 * section of a spatial view. A SectionDrawing element is modelled by a [[SectionDrawingModel]] or a [[GraphicalModel3d]].
 * A [[SectionDrawingLocation]] can associate the drawing with a spatial location, enabling [HyperModeling]($hypermodeling).
 * @public @preview
 */
export declare class SectionDrawing extends Drawing {
    /** The type of section used to generate the drawing. */
    sectionType: SectionType;
    /** The spatial view from which the section was generated. */
    spatialView: RelatedElement;
    /** A transform from the section drawing model's coordinates to spatial coordinates. */
    drawingToSpatialTransform?: Transform;
    /** If the section drawing is placed onto a [[Sheet]] via a [[ViewAttachment]], a transform from the sheet's coordinates to spatial coordinates. */
    sheetToSpatialTransform?: Transform;
    /** If the section drawing is placed onto a [[Sheet]] via a [[ViewAttachment]], the clip to apply to the sheet graphics when drawn in the context
     * of the spatial view.
     * @note The ClipVector is defined in spatial coordinates.
     */
    drawingBoundaryClip?: ClipVector;
    /** If true, when displaying the section drawing as a [DrawingViewState]($frontend), the [[spatialView]] will also be displayed. */
    displaySpatialView: boolean;
    static get className(): string;
    protected static get drawingModelFullClassName(): string;
    protected constructor(props: SectionDrawingProps, iModel: IModelDb);
    toJSON(): SectionDrawingProps;
}
/** The template for a SheetBorder
 * @public @preview
 */
export declare class SheetBorderTemplate extends Document {
    static get className(): string;
    height?: number;
    width?: number;
    protected constructor(props: SheetBorderTemplateProps, iModel: IModelDb);
}
/** The template for a [[Sheet]]
 * @public @preview
 */
export declare class SheetTemplate extends Document {
    static get className(): string;
    height?: number;
    width?: number;
    border?: Id64String;
    protected constructor(props: SheetTemplateProps, iModel: IModelDb);
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
}
/** A digital representation of a *sheet of paper*. Modeled by a [[SheetModel]].
 * @public @preview
 */
export declare class Sheet extends Document {
    static get className(): string;
    height: number;
    width: number;
    scale?: number;
    sheetTemplate?: Id64String;
    protected constructor(props: SheetProps, iModel: IModelDb);
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
    /** Create a Code for a Sheet given a name that is meant to be unique within the scope of the specified DocumentListModel.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the DocumentListModel that contains the Sheet and provides the scope for its name.
     * @param codeValue The Sheet name
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** Information Record Element is an abstract base class for modeling information records. Information Record
 * Element is the default choice if no other subclass of Information Content Element makes sense.
 * @public @preview
 */
export declare abstract class InformationRecordElement extends InformationContentElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
}
/** A Definition Element holds configuration-related information that is meant to be referenced / shared.
 * @public @preview
 */
export declare abstract class DefinitionElement extends InformationContentElement {
    static get className(): string;
    /** If true, don't show this DefinitionElement in user interface lists. */
    isPrivate: boolean;
    protected constructor(props: DefinitionElementProps, iModel: IModelDb);
    /**
     * DefinitionElement custom HandledProps includes 'isPrivate'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * DefinitionElement deserializes 'isPrivate'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): DefinitionElementProps;
    /**
     * DefinitionElement serialize 'isPrivate'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: DefinitionElementProps, iModel: IModelDb): ECSqlRow;
    toJSON(): DefinitionElementProps;
}
/** This abstract class unifies DefinitionGroup and DefinitionContainer for relationship endpoint purposes.
 * @note The associated ECClass was added to the BisCore schema in version 1.0.10
 * @public @preview
 */
export declare abstract class DefinitionSet extends DefinitionElement {
    static get className(): string;
}
/** A DefinitionContainer exclusively owns a set of DefinitionElements contained within its sub-model (of type DefinitionModel).
 * @note The associated ECClass was added to the BisCore schema in version 1.0.10
 * @public @preview
 */
export declare class DefinitionContainer extends DefinitionSet {
    static get className(): string;
    /** Create a DefinitionContainer
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that will contain this DefinitionContainer element.
     * @param code The Code for this DefinitionContainer.
     * @param isPrivate The optional hint, that if `true` means it should not be displayed in the UI.
     * @returns The newly constructed DefinitionContainer
     * @note There is not a predefined CodeSpec for DefinitionContainer elements, so it is the responsibility of the domain or application to create one.
     * @throws [[IModelError]] if there is a problem creating the DefinitionContainer
     */
    static create(iModelDb: IModelDb, definitionModelId: Id64String, code: Code, isPrivate?: boolean): DefinitionContainer;
    /** Insert a DefinitionContainer and its sub-model.
     * @param iModelDb Insert into this IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that will contain this DefinitionContainer element.
     * @param code The Code for this DefinitionContainer.
     * @param isPrivate The optional hint, that if `true` means it should not be displayed in the UI.
     * @returns The Id of the newly inserted DefinitionContainer and its newly inserted sub-model (of type DefinitionModel).
     * @note There is not a predefined CodeSpec for DefinitionContainer elements, so it is the responsibility of the domain or application to create one.
     * @throws [[IModelError]] if there is a problem inserting the DefinitionContainer
     */
    static insert(iModelDb: IModelDb, definitionModelId: Id64String, code: Code, isPrivate?: boolean): Id64String;
}
/** A non-exclusive set of DefinitionElements grouped using the DefinitionGroupGroupsDefinitions relationship.
 * @note The associated ECClass was added to the BisCore schema in version 1.0.10
 * @public @preview
 */
export declare class DefinitionGroup extends DefinitionSet {
    static get className(): string;
    /** Create a DefinitionGroup
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that will contain this DefinitionGroup element.
     * @param code The Code for this DefinitionGroup
     * @param isPrivate The optional hint, that if `true` means it should not be displayed in the UI.
     * @returns The newly constructed DefinitionGroup
     * @note There is not a predefined CodeSpec for DefinitionGroup elements, so it is the responsibility of the domain or application to create one.
     * @throws [[IModelError]] if there is a problem creating the DefinitionGroup
     */
    static create(iModelDb: IModelDb, definitionModelId: Id64String, code: Code, isPrivate?: boolean): DefinitionGroup;
}
/** Defines a set of properties (the *type*) that may be associated with an element.
 * @public @preview
 */
export declare abstract class TypeDefinitionElement extends DefinitionElement {
    static get className(): string;
    recipe?: RelatedElement;
    protected constructor(props: TypeDefinitionElementProps, iModel: IModelDb);
    protected collectReferenceIds(referenceIds: EntityReferenceSet): void;
}
/** Defines a recipe for generating instances from a definition.
 * @beta
 */
export declare abstract class RecipeDefinitionElement extends DefinitionElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
}
/** Defines a set of properties (the *type*) that can be associated with a Physical Element. A Physical
 * Type has a strong correlation with something that can be ordered from a catalog since all instances
 * share a common set of properties.
 * @public @preview
 */
export declare abstract class PhysicalType extends TypeDefinitionElement {
    static get className(): string;
    /** If defined, the [[PhysicalMaterial]] that makes up this PhysicalType. */
    physicalMaterial?: RelatedElement;
    protected constructor(props: PhysicalTypeProps, iModel: IModelDb);
    toJSON(): PhysicalTypeProps;
    /** Create a Code for a PhysicalType element given a name that is meant to be unique within the scope of the specified DefinitionModel.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the DefinitionModel that contains the PhysicalType element and provides the scope for its name.
     * @param codeValue The PhysicalType name
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** Defines a set of properties (the *type*) that can be associated with a spatial location.
 * @public @preview
 */
export declare abstract class SpatialLocationType extends TypeDefinitionElement {
    static get className(): string;
    protected constructor(props: TypeDefinitionElementProps, iModel: IModelDb);
    /** Create a Code for a SpatialLocationType element given a name that is meant to be unique within the scope of the specified DefinitionModel.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the DefinitionModel that contains the SpatialLocationType element and provides the scope for its name.
     * @param codeValue The SpatialLocationType name
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** A TemplateRecipe3d is a DefinitionElement that has a sub-model that contains the 3d template elements.
 * @beta
 */
export declare class TemplateRecipe3d extends RecipeDefinitionElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
    /** Create a Code for a TemplateRecipe3d given a name that is meant to be unique within the scope of its Model.
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that contains this TemplateRecipe3d element.
     * @param codeValue The name of the TemplateRecipe3d element.
     */
    static createCode(iModelDb: IModelDb, definitionModelId: CodeScopeProps, codeValue: string): Code;
    /** Create a TemplateRecipe3d
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that contains this TemplateRecipe3d element.
     * @param name The name (Code.value) of the TemplateRecipe3d
     * @returns The newly constructed TemplateRecipe3d
     * @throws [[IModelError]] if there is a problem creating the TemplateRecipe3d
     */
    static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, isPrivate?: boolean): TemplateRecipe3d;
    /** Insert a TemplateRecipe3d and a PhysicalModel (sub-model) that will contain the 3d template elements.
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that contains this TemplateRecipe3d element.
     * @param name The name (Code.value) of the TemplateRecipe3d
     * @returns The Id of the newly inserted TemplateRecipe3d and the PhysicalModel that sub-models it.
     * @throws [[IModelError]] if there is a problem inserting the TemplateRecipe3d or its sub-model.
     */
    static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, isPrivate?: boolean): Id64String;
}
/** Defines a set of properties (the *type*) that can be associated with a 2D Graphical Element.
 * @public @preview
 */
export declare abstract class GraphicalType2d extends TypeDefinitionElement {
    static get className(): string;
    protected constructor(props: TypeDefinitionElementProps, iModel: IModelDb);
    /** Create a Code for a GraphicalType2d element given a name that is meant to be unique within the scope of the specified DefinitionModel.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the DefinitionModel that contains the GraphicalType2d element and provides the scope for its name.
     * @param codeValue The GraphicalType2d name
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** A recipe that uses a 2D template for creating new instances.
 * @beta
 */
export declare class TemplateRecipe2d extends RecipeDefinitionElement {
    static get className(): string;
    protected constructor(props: ElementProps, iModel: IModelDb);
    /** Create a Code for a TemplateRecipe2d given a name that is meant to be unique within the scope of its Model.
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that contains this TemplateRecipe2d element.
     * @param codeValue The name of the TemplateRecipe2d element.
     */
    static createCode(iModelDb: IModelDb, definitionModelId: CodeScopeProps, codeValue: string): Code;
    /** Create a TemplateRecipe2d
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that contains this TemplateRecipe2d element.
     * @param name The name (Code.value) of the TemplateRecipe2d
     * @returns The newly constructed TemplateRecipe2d
     * @throws [[IModelError]] if there is a problem creating the TemplateRecipe2d
     */
    static create(iModelDb: IModelDb, definitionModelId: Id64String, name: string, isPrivate?: boolean): TemplateRecipe2d;
    /** Insert a TemplateRecipe2d and a DrawingModel (sub-model) that will contain the 2d template elements.
     * @param iModelDb The IModelDb
     * @param definitionModelId The Id of the [DefinitionModel]($backend) that contains this TemplateRecipe2d element.
     * @param name The name (Code.value) of the TemplateRecipe2d
     * @returns The Id of the newly inserted TemplateRecipe2d and the PhysicalModel that sub-models it.
     * @throws [[IModelError]] if there is a problem inserting the TemplateRecipe2d or its sub-model.
     */
    static insert(iModelDb: IModelDb, definitionModelId: Id64String, name: string, isPrivate?: boolean): Id64String;
}
/** An abstract base class for elements that establishes a particular modeling perspective for its parent Subject.
 * Instances are always sub-modeled by a specialization of Model of the appropriate modeling perspective.
 * @see [iModel Information Hierarchy]($docs/bis/guide/data-organization/top-of-the-world), [[Subject]], [[Model]]
 * @public @preview
 */
export declare abstract class InformationPartitionElement extends InformationContentElement {
    static get className(): string;
    /** A human-readable string describing the intent of the partition. */
    description?: string;
    protected constructor(props: InformationPartitionElementProps, iModel: IModelDb);
    toJSON(): InformationPartitionElementProps;
    /** Create a code that can be used for any subclass of InformationPartitionElement.
     * @param iModelDb The IModelDb
     * @param parentSubjectId The Id of the parent Subject that provides the scope for names of its child InformationPartitionElements.
     * @param codeValue The InformationPartitionElement name
     */
    static createCode(iModel: IModelDb, parentSubjectId: CodeScopeProps, codeValue: string): Code;
}
/** A DefinitionPartition element establishes a *Definition* modeling perspective for its parent Subject.
 * A DefinitionPartition is always sub-modeled by a DefinitionModel.
 * @see [[DefinitionModel]]
 * @public @preview
 */
export declare class DefinitionPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A DocumentPartition element establishes a *Document* modeling perspective for its parent Subject.
 * A DocumentPartition is always sub-modeled by a DocumentListModel.
 * @see [[DocumentListModel]]
 * @public @preview
 */
export declare class DocumentPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A GroupInformationPartition element establishes a *Group Information* modeling perspective for its parent Subject.
 * A GroupInformationPartition is always sub-modeled by a GroupInformationModel.
 * @see [[GroupInformationModel]]
 * @public @preview
 */
export declare class GroupInformationPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A GraphicalPartition3d element establishes a *3D Graphical* modeling perspective for its parent Subject.
 * A GraphicalPartition3d is always sub-modeled by a GraphicalModel3d.
 * @note The associated ECClass was added to the BisCore schema in version 1.0.8
 * @see [[GraphicalModel3d]]
 * @public @preview
 */
export declare class GraphicalPartition3d extends InformationPartitionElement {
    static get className(): string;
}
/** An InformationRecordPartition element establishes a *Information Record* modeling perspective for its parent Subject.
 * A InformationRecordPartition is always sub-modeled by an InformationRecordModel.
 * @see [[InformationRecordModel]]
 * @public @preview
 */
export declare class InformationRecordPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A LinkPartition element establishes a *Link* modeling perspective for its parent Subject. A LinkPartition is always sub-modeled by a LinkModel.
 * @see [[LinkModel]]
 * @public @preview
 */
export declare class LinkPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A PhysicalPartition element establishes a *Physical* modeling perspective for its parent Subject. A PhysicalPartition is always sub-modeled by a PhysicalModel.
 * @see [[PhysicalModel]]
 * @public @preview
 */
export declare class PhysicalPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A SpatialLocationPartition element establishes a *SpatialLocation* modeling perspective for its parent Subject.
 * A SpatialLocationPartition is always sub-modeled by a SpatialLocationModel.
 * @see [[SpatialLocationModel]]
 * @public @preview
 */
export declare class SpatialLocationPartition extends InformationPartitionElement {
    static get className(): string;
}
/** A SheetIndexPartition element establishes a [[SheetIndex]] modeling perspective for its parent [[Subject]].
 * A SheetIndexPartition is always sub-modeled by a [[SheetIndexModel]].
 * @beta
 */
export declare class SheetIndexPartition extends InformationPartitionElement {
    static get className(): string;
}
/** Group Information is an abstract base class for modeling entities whose main purpose is to reference a group of related elements.
 * @public @preview
 */
export declare abstract class GroupInformationElement extends InformationReferenceElement {
    static get className(): string;
}
/** An information element that specifies a link.
 * @public @preview
 */
export declare abstract class LinkElement extends InformationReferenceElement {
    static get className(): string;
    /** Create a Code for a LinkElement given a name that is meant to be unique within the scope of the specified Model.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the Model that contains the LinkElement and provides the scope for its name.
     * @param codeValue The LinkElement name
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** An information element that specifies a URL link.
 * @public @preview
 */
export declare class UrlLink extends LinkElement {
    static get className(): string;
    description?: string;
    url?: string;
    protected constructor(props: UrlLinkProps, iModel: IModelDb);
    /**
     * UrlLink custom HandledProps includes 'description', and 'url'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * UrlLink deserializes 'description', and 'url'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): UrlLinkProps;
    /**
     * UrlLink serializes 'description', and 'url'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: UrlLinkProps, iModel: IModelDb): ECSqlRow;
    toJSON(): UrlLinkProps;
}
/** Represents a folder-like structure that organizes repositories (typically files) in an external system.
 * @note The associated ECClass was added to the BisCore schema in version 1.0.13
 * @alpha
 */
export declare class FolderLink extends UrlLink {
    static get className(): string;
}
/** An information element that links to a repository.
 * @public @preview
 */
export declare class RepositoryLink extends UrlLink {
    static get className(): string;
    repositoryGuid?: GuidString;
    /** @note This property was added to the BisCore schema in version 1.0.13 */
    format?: string;
    protected constructor(props: RepositoryLinkProps, iModel: IModelDb);
    toJSON(): RepositoryLinkProps;
}
/** An information element that links to an embedded file.
 * @public @preview
 */
export declare class EmbeddedFileLink extends LinkElement {
    static get className(): string;
}
/** A real world entity is modeled as a Role Element when a set of external circumstances define an important
 * role (one that is worth tracking) that is not intrinsic to the entity playing the role. For example,
 * a person can play the role of a teacher or a rock can play the role of a boundary marker.
 * @public @preview
 */
export declare abstract class RoleElement extends Element {
    static get className(): string;
}
/** A Definition Element that specifies a collection of geometry that is meant to be reused across Geometric
 * Element instances. Leveraging Geometry Parts can help reduce file size and improve display performance.
 * @public @preview
 */
export declare class GeometryPart extends DefinitionElement {
    static get className(): string;
    geom?: GeometryStreamProps;
    bbox: ElementAlignedBox3d;
    protected constructor(props: GeometryPartProps, iModel: IModelDb);
    /**
     * GeometryPart custom HandledProps includes 'geometryStream', 'bBoxHigh', and 'bBoxLow'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * GeometryPart deserializes 'geometryStream', 'bBoxHigh', and 'bBoxLow'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): GeometryPartProps;
    /**
     * GeometryPart serialize 'geometryStream', 'bBoxHigh', and 'bBoxLow'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: GeometryPartProps, iModel: IModelDb): ECSqlRow;
    toJSON(): GeometryPartProps;
    /** Create a Code for a GeometryPart element given a name that is meant to be unique within the scope of the specified DefinitionModel.
     * @param iModel  The IModelDb
     * @param scopeModelId The Id of the DefinitionModel that contains the GeometryPart element and provides the scope for its name.
     * @param codeValue The GeometryPart name
     * @note GeometryPart elements are not required to be named (have a non-empty Code).
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** The definition element for a line style
 * @public @preview
 */
export declare class LineStyle extends DefinitionElement {
    static get className(): string;
    description?: string;
    data: string;
    protected constructor(props: LineStyleProps, iModel: IModelDb);
    /**
     * LineStyle custom HandledProps includes 'data'.
     * @inheritdoc
     * @beta
     */
    protected static readonly _customHandledProps: CustomHandledProperty[];
    /**
     * LineStyle deserializes 'data'.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): LineStyleProps;
    /**
     * LineStyle serializes 'data'.
     * @inheritdoc
     * @beta
     */
    static serialize(props: LineStyleProps, iModel: IModelDb): ECSqlRow;
    /** Create a Code for a LineStyle definition given a name that is meant to be unique within the scope of the specified model.
     * @param iModel The IModel
     * @param scopeModelId The Id of the DefinitionModel that contains the LineStyle and provides the scope for its name.
     * @param codeValue The name of the LineStyle
     * @returns A LineStyle Code
     */
    static createCode(iModel: IModelDb, scopeModelId: CodeScopeProps, codeValue: string): Code;
}
/** Describes how to animate a view of a [[GeometricModel]] to show change over time using a [RenderSchedule.Script]($common).
 * @note This class was introduced in version 01.00.13 of the BisCore ECSchema. It should only be used with [[IModelDb]]s containing that version or newer.
 * @public @preview
 */
export declare class RenderTimeline extends InformationRecordElement {
    static get className(): string;
    /** A human-readable description of the timeline, which may be an empty string. */
    description: string;
    /** The JSON representation of the instructions for visualizing change over time.
     * @see [RenderSchedule.Script]($common) for the API for working with the script.
     */
    scriptProps: RenderSchedule.ScriptProps;
    protected constructor(props: RenderTimelineProps, iModel: IModelDb);
    static fromJSON(props: RenderTimelineProps, iModel: IModelDb): RenderTimeline;
    toJSON(): RenderTimelineProps;
    /**
     * RenderTimeline deserialize checks if Schedule Script Element Ids need to be omitted, and if so, removes them.
     * @inheritdoc
     * @beta
     */
    static deserialize(props: DeserializeEntityArgs): RenderTimelineProps;
    private static parseScriptProps;
    protected collectReferenceIds(ids: EntityReferenceSet): void;
    /** @alpha */
    protected static onCloned(context: IModelElementCloneContext, sourceProps: RenderTimelineProps, targetProps: RenderTimelineProps): void;
    /** Remap Ids when cloning a RenderSchedule.Script between iModels on a DisplayStyle or RenderTimeline.
     * @beta
     */
    static remapScript(context: IModelElementCloneContext, input: RenderSchedule.ScriptProps): RenderSchedule.ScriptProps;
}
//# sourceMappingURL=Element.d.ts.map