import { Project } from '../api/types/Project';
import { FileExtraction, GeometryFile } from '../api/types/FileExtraction';
import { Model } from '../api/types/Model';
import { ModelRevision } from '../api/types/ModelRevision';
import type { Tool } from '../components/Tool';
export type FeatureFlags = {
    /**
     * @beta Enables the new measurement mode Point to Point, which allows users to measure the distance between two points in the model.
     */
    enablePointToPoint: boolean;
    /**
     * @beta Enables writing mesh data to OPFS for partitioned models, which allows users to use features that use mesh data, notably Point to Point.
     */
    enableMeshDataOnOPFS: boolean;
};
export type ValidatedFeatureFlags = Readonly<FeatureFlags>;
export type CommonOptions = {
    /**
     * Always required
     */
    projectId: Project['id'];
    parentElement: HTMLElement;
    companyId: number;
    /**
     * Sometimes required
     */
    /**
     * Always optional
     */
    tools?: Tool[];
    bcfCamera?: any;
    min_boundary?: {
        x: string;
        y: string;
        z: string;
    };
    max_boundary?: {
        x: string;
        y: string;
        z: string;
    };
    rotation?: {
        x: string;
        y: string;
        z: string;
    };
    plans?: any[];
    levels?: any[];
    locale?: string;
    baseUrl?: string;
    accessToken?: string;
    debug?: boolean;
    multiselect?: boolean;
    selection?: string;
    enableWebWorker?: boolean;
    featureFlags?: Partial<FeatureFlags>;
    logInitializationTimes?: boolean;
    sceneGraph?: string;
    bimFileId?: number;
};
/**
 * API Configurations
 *
 * The Web Viewer can be configured to fetch resources (basically PWF files and
 * properties) in a variety of ways. These types attempt to accurately declare
 * the valid configurations that we support.
 */
export type GeometryBundle = {
    nodeUrl: GeometryFile['url'];
    meshnodeUrl: GeometryFile['url'];
    meshUrl?: GeometryFile['url'];
    manifestUrl?: GeometryFile['url'];
};
export type PwfV2Bundle = {
    nodeUrl: GeometryFile['url'];
    meshnodeUrl: GeometryFile['url'];
    meshUrl: GeometryFile['url'];
    manifestUrl: GeometryFile['url'];
};
export type PwfV1Bundle = {
    nodeUrl: GeometryFile['url'];
    meshnodeUrl: GeometryFile['url'];
    meshUrl: GeometryFile['url'];
};
export type FileExtractionModePwfV1OverrideOptions = CommonOptions & PwfV1Bundle & {
    fileExtractionId: FileExtraction['id'];
};
export type FileExtractionModePwfV2OverrideOptions = CommonOptions & PwfV2Bundle & {
    fileExtractionId: FileExtraction['id'];
};
export type FileExtractionModeOptions = CommonOptions & {
    fileExtractionId: FileExtraction['id'];
};
export type ModelRevisionModePwfV1Options = CommonOptions & PwfV1Bundle & {
    modelId: Model['id'];
    modelRevisionId: ModelRevision['id'];
};
export type ModelRevisionModePwfV2Options = CommonOptions & PwfV2Bundle & {
    modelId: Model['id'];
    modelRevisionId: ModelRevision['id'];
};
export type FileExtractionModePwfV1OverrideResource = PwfV1Bundle & {
    fileExtractionId: FileExtraction['id'];
};
export type FileExtractionModePwfV2OverrideResource = PwfV2Bundle & {
    fileExtractionId: FileExtraction['id'];
};
export type FileExtractionModeResource = {
    fileExtractionId: FileExtraction['id'];
};
export type ModelRevisionModePwfV1Resource = PwfV1Bundle & {
    modelId: Model['id'];
    modelRevisionId: ModelRevision['id'];
};
export type ModelRevisionModePwfV2Resource = PwfV2Bundle & {
    modelId: Model['id'];
    modelRevisionId: ModelRevision['id'];
};
export type Resource = FileExtractionModePwfV1OverrideResource | FileExtractionModePwfV2OverrideResource | FileExtractionModeResource | ModelRevisionModePwfV1Resource | ModelRevisionModePwfV2Resource;
export type ResourceOptions = CommonOptions & {
    resources: Resource[];
};
export type Options = FileExtractionModePwfV2OverrideOptions | FileExtractionModePwfV1OverrideOptions | FileExtractionModeOptions | ModelRevisionModePwfV2Options | ModelRevisionModePwfV1Options | ResourceOptions;
export declare const isModelRevisionModePwfV1Options: (options: Options) => options is ModelRevisionModePwfV1Options;
export declare const isModelRevisionModePwfV2Options: (options: Options) => options is ModelRevisionModePwfV2Options;
export declare const isFileExtractionModePwfV1OverrideOptions: (options: Options) => options is FileExtractionModePwfV1OverrideOptions;
export declare const isFileExtractionModePwfV2OverrideOptions: (options: Options) => options is FileExtractionModePwfV2OverrideOptions;
export declare const isFileExtractionModeOptions: (options: Options) => options is FileExtractionModeOptions;
export declare const isFileExtractionModePwfV2OverrideResource: (resource: Resource) => resource is FileExtractionModePwfV2OverrideResource;
export declare const isFileExtractionModePwfV1OverrideResource: (resource: Resource) => resource is FileExtractionModePwfV1OverrideResource;
export declare const isFileExtractionModeResource: (resource: Resource) => resource is FileExtractionModeResource;
export declare const isModelRevisionModePwfV2Resource: (resource: Resource) => resource is ModelRevisionModePwfV2Resource;
export declare const isModelRevisionModePwfV1Resource: (resource: Resource) => resource is ModelRevisionModePwfV1Resource;
export declare const isResourceOptions: (options: Options) => options is ResourceOptions;
/**
 * Type Testing
 *
 * Uncomment these lines to test that the types are working as intended. If you
 * create a new valid configuration, add it here to make sure it blends.
 */
