/**
Main UI class, provides utility methods and basic UI elements.
@class
 */
export class VRSpaceUI {
    static instance: any;
    /** babylon scene*/
    scene: any;
    /** content base (prefix), default empty (same host) */
    contentBase: string;
    /** Path to logo, null defaults to contentBase+/babylon (vrspace.org logo)*/
    logoPath: any;
    /** Logo file name, defaults to logo.glb */
    logoFile: string;
    /** vrspace.org logo mesh */
    logo: any;
    /** Path to logo, null defaults to contentBase+/babylon/portal */
    portalPath: any;
    /** Portal file name, defaults to scene.gltf */
    portalFile: string;
    /** portal mesh */
    portal: any;
    /** debug output enabled */
    debug: boolean;
    /** frames per second */
    fps: number;
    /** Pointer to function, defaults to this.loadProgressIndiciatorFactory */
    loadProgressIndicator: (scene: any, camera: any) => Promise<LoadProgressIndicator>;
    /** Head-up display
     * @type {HUD}
     */
    hud: HUD;
    selectables: any[];
    /** babylon GUI manager - multiple instances may cause issues with transparency */
    guiManager: any;
    /** Script loader */
    scriptLoader: ScriptLoader;
    /** VR availability */
    canVR: any;
    /** AR availability */
    canAR: any;
    /** @private */
    private indicator;
    /** @private */
    private initialized;
    /** @private */
    private optimizingScene;
    /** reference to VRSpace singleton */
    VRSPACE: import("../client/vrspace.js").VRSpace;
    /** reference to AssetLoader singleton */
    assetLoader: AssetLoader;
    /** UI Material, created from init, defaults to color 0.2,0.2,0.3, with 0.7 alpha */
    uiMaterial: any;
    /**
     * Creates asset loader, preloads vrspace.org logo and portal for later use.
    @param scene babylon.js scene to operate with.
    */
    init(scene: any): Promise<this>;
    /** Used in init, return logPath if exists, or default path to vrspace.org logo */
    logoDir(): any;
    /** Returns portalPath if exists, defaults to contentBase+/babylon/portal */
    portalDir(): any;
    /** Creates default LoadProgressIndicator bound to given camera, if one does not already exist.
    @param scene
    @param camera
    @returns load progress indicator
     */
    loadProgressIndicatorFactory(scene: any, camera: any): Promise<LoadProgressIndicator>;
    /** Logs to js console if debug is enabled
    @param something to log
     */
    log(something: any): void;
    /** loads the portal
    @param scene
    */
    loadPortal(scene: any): Promise<any>;
    /**
    lists files on a server directory
    @param theUrl url to load from
    @param callback to call load, passing it XMLHttpRequest
    */
    listFiles(theUrl: any, callback: any): XMLHttpRequest;
    /**
    lists files on a server directory
    @param theUrl url to load from
    @returns Promise with XMLHttpRequest
    */
    listFilesAsync(theUrl: any): Promise<any>;
    /** list folders with their jpg thumbnails (files ending with .jpg)
    @param dir directory to list
    @param callback to call
     */
    listThumbnails(dir: any, callback: any): void;
    /** list character folders and their fix files
    @param dir directory to list
    @param callback to call
    */
    listCharacters(dir: any, callback: any): void;
    /** list character folders and their fix files
    @param dir directory to list
    */
    listCharactersAsync(dir: any): Promise<ServerFolder[]>;
    /**
    List files in a server folder
    @param dir directory to list
    @param callback receives string array with urls
    @param suffix optional suffix of listed files
     */
    listDirectory(dir: any, callback: any, suffix: any): XMLHttpRequest;
    /**
    list server folders along with their matching files
    i.e. files with the same name, plus given suffix
    @param dir directory to list
    @param callback to call, receives ServerFolder array as argument
    @param suffix of related file
     */
    listMatchingFiles(dir: any, callback: any, suffix: any): XMLHttpRequest;
    /**
    list server folders along with their matching files
    i.e. files with the same name, plus given suffix
    @param dir directory to list
    @param suffix of related file
    @returns Promise with ServerFolder array
     */
    listMatchingFilesAsync(dir: any, suffix: any): Promise<ServerFolder[]>;
    /**
    Utility method, should a node and its children receive shadows.
    @param node a babylonjs node
    @param shadows true ofr false
     */
    receiveShadows(node: any, shadows: any): void;
    /**
    Utility method to instantiate if possible, or otherwise clone a mesh, including all children recursivelly.
    Both instance and clone use the same material, but only the clone has own lightning effects (e.g. shadows, environment).
    @param mesh to instantiate/clone
    @param parent optional, copy will have this parent
    @param replaceParent optional
    @returns copied mesh
     */
    copyMesh(mesh: any, parent: any, replaceParent: any): any;
    /**
    Utility method - create x,y,z animation of a mesh field.
    @param mesh to animate
    @param field name of field to animate, e.g. "position" or "rotation"
    @param fps frames per second, defaults to fps field value
    @returns babylonjs AnimationGroup
     */
    createAnimation(mesh: any, field: any, fps: any): any;
    /**
    Utility method - update x,y,z animation of a mesh field.
    If the animation group is playing, it is stopped first. After the update, starts to play, not looping.
    @param group AnimationGroup to update
    @param from Vector3
    @param to Vector3
     */
    updateAnimation(group: any, from: any, to: any): void;
    /**
    Utility method - create quaternion animation of a mesh field
    @param mesh to animate
    @param field name of field to animate, e.g. "rotationQuaternion"
    @param fps frames per second, defaults to fps field value
    @returns babylonjs AnimationGroup
     */
    createQuaternionAnimation(mesh: any, field: any, fps: any): any;
    /**
    Utility method - update quaternion animation of a mesh field around Y axis.
    @param group AnimationGroup to update
    @param from Vector3
    @param to Vector3
     */
    updateQuaternionAnimationFromVec(group: any, from: any, to: any): void;
    /**
    Utility method - update quaternion animation of a mesh field around Y axis.
    @param group AnimationGroup to update
    @param from Quaternion
    @param to Quaternion
     */
    updateQuaternionAnimation(group: any, from: any, to: any): void;
    /** Optimize the scene for better frame rate */
    optimizeScene(scene: any): void;
    /**
    Utility method - returns the top parent node in hierarchy
     */
    findRootNode(mesh: any): any;
    /**
    Utility method to save a file with given name and file content.
    @param filename to save
    @param content of the file, typically some JSON string
     */
    saveFile(filename: any, content: any): void;
    /**
     * Save the entire scene as a GLB file.
     * @param fileName defaults to "scene"
     */
    saveSceneGlb(fileName?: string): void;
    /**
     * Save the entire scene as GLTF: fileName.gltf, fileName.bin, textures, etc.
     * @param fileName defaults to "scene"
     */
    saveSceneGltf(fileName?: string): void;
    /**
     * Save scene as babylon json file. This only works for very simple scenes,
     * and is likely to fail for any vrspace world with TypeError: cyclic object value.
     * Furthermore, it does not save instances.
     * @param fileName defaults to "scene.babylon"
     */
    saveSceneBabylon(fileName?: string): void;
    hasTouchScreen(): boolean;
    /**
     * Add a selectable Form, Area, etc - something that may be interacted with in XR.
     * It must have isSelectableMesh(mesh) method.
     */
    addSelectable(item: any): void;
    /**
     * Remove a selectable element.
     */
    removeSelectable(item: any): void;
    /**
     * Returns for a mesh that belongs to a selectable UI element.
     */
    isSelectableMesh(mesh: any): boolean;
}
/**
 * @type {VRSpaceUI}
 */
export let VRSPACEUI: VRSpaceUI;
import { LoadProgressIndicator } from './load-progress-indicator.js';
import { HUD } from './hud.js';
import { ScriptLoader } from '../client/script-loader.js';
import { AssetLoader } from '../core/asset-loader.js';
import { ServerFolder } from '../core/server-folder.js';
