import type * as WebIfc from "web-ifc";
import type { BmtElementProps, BmtModelData, BmtModelProps } from "../Loaders/BmtLoader";
import type { ViewerModelLevel } from "../api/ViewerPropertiesApi";
type IfcClassConstructor = abstract new (...args: never[]) => unknown;
type IfcNamespaceClassNames<TNamespace> = Extract<{
    [Key in keyof TNamespace]: TNamespace[Key] extends IfcClassConstructor ? Key : never;
}[keyof TNamespace], `Ifc${string}`>;
export type IfcClass = IfcNamespaceClassNames<typeof WebIfc.IFC2X3> | IfcNamespaceClassNames<typeof WebIfc.IFC4> | IfcNamespaceClassNames<typeof WebIfc.IFC4X3>;
export type IfcClassName = IfcClass | (string & {});
export type FilteredElement = {
    elementID: number;
    props: BmtElementProps;
};
export type FilteredElementWithModel = FilteredElement & {
    modelID: number;
};
export type FilteredElementId = number;
export type FilteredElementsResult = Record<number, FilteredElement[]>;
export type FilteredElementIdsResult = Record<number, number[]>;
export type FilteredElementPredicate = (element: FilteredElementWithModel) => unknown;
export type FilteredElementsSource = BmtModelData | BmtModelProps | Record<number, BmtModelData> | Record<number, BmtModelProps> | null | undefined;
export declare class FilteredElementsCollector<TSingleModel extends boolean = false> {
    private elements;
    private filters;
    private selectedModelIDs;
    constructor(source?: FilteredElementsSource);
    from(source: FilteredElementsSource): this;
    ofType(type: IfcClassName | readonly IfcClassName[]): this;
    ofModel(modelID: number): FilteredElementsCollector<true>;
    ofModel(modelID: number[]): FilteredElementsCollector<false>;
    ofLevel(level: ViewerModelLevel): FilteredElementsCollector<true>;
    Where(predicate: FilteredElementPredicate): this;
    where(predicate: FilteredElementPredicate): this;
    private getFilteredElements;
    private hasSingleSelectedModel;
    toElements(): TSingleModel extends true ? FilteredElement[] : FilteredElementsResult;
    toElementsIds(): TSingleModel extends true ? number[] : FilteredElementIdsResult;
    toElementIds(): TSingleModel extends true ? number[] : FilteredElementIdsResult;
}
export {};
