import { IfcAPI } from "web-ifc";
import type { BmtModelProps, BmtModelStructureNode, BmtPropertyRecord, BmtPropertyValue } from "../BmtLoader";
type IfcValueRef = {
    value: IfcRawValue;
};
type IfcRawValue = BmtPropertyValue | IfcRawValue[] | IfcValueRef | {
    [key: string]: IfcRawValue;
};
type IfcLineData = Record<string, IfcRawValue> & {
    expressID?: number;
    Elevation?: BmtPropertyValue;
    GlobalId?: BmtPropertyValue;
    HasProperties?: BmtPropertyRecord[];
    LongName?: BmtPropertyValue;
    Name?: BmtPropertyValue;
    ObjectType?: BmtPropertyValue;
    Quantities?: BmtPropertyRecord[];
    RelatedObjects?: number[];
    RelatingPropertyDefinition?: number;
    type?: number | string;
};
type PropertyRelationConfig = {
    key: string;
    name: number;
    related: string;
    relating: string;
};
type SpatialTreeChunks = Record<number, number[]>;
export type IfcElementsAssembly = {
    dict: Record<number, number>;
    ids: number[];
};
export type IfcPropertiesProgressData = {
    loaded: number;
    phase: "propertySets" | "elements";
    total: number;
};
export type IfcPropertiesProgressCallback = (progress: IfcPropertiesProgressData) => void;
export declare class PropertySerializer {
    private PropsNames;
    readonly parser: IfcAPI;
    constructor(parser: IfcAPI);
    serializeAllProperties(modelID: number, ids: Set<number>, onProgress?: IfcPropertiesProgressCallback): Promise<BmtModelProps>;
    getPropertiesAsBlobs(modelID: number, ids: Set<number>, onProgress?: IfcPropertiesProgressCallback): Promise<BmtModelProps>;
    getItemProperty(modelID: number, id: number, flatten?: boolean): Promise<IfcLineData | null>;
    getElementsAssembly(modelID: number): Promise<IfcElementsAssembly>;
    private formatItemProperties;
    private getAllRelDefinesByProps;
    getSpatialStructure(modelID: number, includeProperties?: boolean): Promise<BmtModelStructureNode>;
    getRelatedProperties(modelID: number, elementID: number, propsName: PropertyRelationConfig, recursive?: boolean): Promise<IfcLineData[]>;
    getChunks(modelID: number, chunks: SpatialTreeChunks, propNames: PropertyRelationConfig): Promise<void>;
    getValue(value: IfcRawValue | undefined): BmtPropertyValue;
    private getStringValue;
    private getStructureProperties;
    newIfcProject(data: IfcLineData): BmtModelStructureNode;
    newIfcItem(expressID: number): BmtModelStructureNode;
    getSpatialNode(modelID: number, node: BmtModelStructureNode, treeChunks: SpatialTreeChunks, includeProperties: boolean): Promise<void>;
    getChildren(modelID: number, node: BmtModelStructureNode, treeChunks: SpatialTreeChunks, propNames: PropertyRelationConfig, includeProperties: boolean): Promise<void>;
    newNode(id: number, data: IfcLineData): BmtModelStructureNode;
    getSpatialTreeChunks(modelID: number): Promise<SpatialTreeChunks>;
    saveChunk(chunks: SpatialTreeChunks, propNames: PropertyRelationConfig, rel: IfcLineData): void;
    private shouldEmitProgress;
}
export {};
