import { XRControllerModelFactory } from "three/examples/jsm/webxr/XRControllerModelFactory.js";
import { XRHandMeshModel } from "three/examples/jsm/webxr/XRHandMeshModel.js";
import { AssetReference } from "../../../engine/engine_addressables.js";
import type { IGameObject } from "../../../engine/engine_types.js";
import { NeedleXRController, type NeedleXRControllerEventArgs, type NeedleXREventArgs } from "../../../engine/engine_xr.js";
import { Behaviour, Component } from "../../Component.js";
/**
 * XRControllerModel is a component that allows to display controller models or hand models in an XR session.
 * It automatically loads the appropriate model for the connected controller or hand.
 *
 * You can configure if controller models or hand models should be created.
 *
 * @summary Displays controller or hand models in XR
 * @category XR
 * @group Components
 */
export declare class XRControllerModel extends Behaviour {
    /**
     * If true, the controller model will be created when a controller is added/connected
     * @default true
     */
    createControllerModel: boolean;
    /**
     * If true, the hand model will be created when a hand is "added"/tracked
     * @default true
     */
    createHandModel: boolean;
    /** assign a model or model url to create custom hand models */
    customLeftHand?: AssetReference;
    /** assign a model or model url to create custom hand models */
    customRightHand?: AssetReference;
    static readonly factory: XRControllerModelFactory;
    supportsXR(mode: XRSessionMode): boolean;
    private readonly _models;
    onXRControllerAdded(args: NeedleXRControllerEventArgs): Promise<void>;
    onXRControllerRemoved(args: NeedleXRControllerEventArgs): void;
    onBeforeXR(_mode: XRSessionMode, args: XRSessionInit & {
        trackedImages: Array<any>;
    }): void;
    onLeaveXR(_args: NeedleXREventArgs): void;
    onBeforeRender(): void;
    private updateRendering;
    protected loadModel(controller: NeedleXRController, url: string): Promise<IGameObject | null>;
    protected loadHandModel(comp: Component, controller: NeedleXRController): Promise<{
        handObject: IGameObject;
        handmesh: XRHandMeshModel;
    } | null>;
    private makeOccluder;
}
