import * as THREE from "three";
import { VRM } from "@pixiv/three-vrm";
import { GLTFLoader } from "three/addons/loaders/GLTFLoader.js";
import VRMIKHandler from "../utils/vendors/models/vrm-ik-handler";
import VRMModelNoise from "../utils/vendors/models/vrm-model-noise";
/**
 * VrmService configurations
 */
type VrmServiceConfigs = {
    /**
     * Callback when VRM model is loaded
     * @param vrm VRM instance
     * @returns
     */
    onLoad?: (vrm: VRM) => void;
    /**
     * Callback when VRM model failed to be loaded
     * @param err Error
     * @returns
     */
    onLoadErr?: (err: any) => void;
    /**
     * Callback when VRM model is loading
     * @param progressInPercentage percentage of loading from 0 to 100
     * @returns
     */
    onLoadProgress?: (progressInPercentage: number) => void;
    /**
     * 3D Model config
     */
    modelConfigs?: {
        [boneName: string]: {
            stiffness?: number;
            dragForce?: number;
            hitRadius?: number;
        };
    };
    /**
     * VRM URL
     */
    vrmUrl: string;
    /**
     * Camera instance to set VRM model lookAt direction
     */
    camera?: THREE.Camera;
};
/**
 * VrmService provides functions to load VRM model and fade to animations.
 */
export declare class VrmService {
    previousAction: THREE.AnimationAction | undefined;
    activeAction: THREE.AnimationAction | undefined;
    isAnimating: boolean;
    lastCloseTime: Date;
    configs: VrmServiceConfigs;
    loader: GLTFLoader;
    currentVrm: VRM | undefined;
    mixer: THREE.AnimationMixer | undefined;
    ik: VRMIKHandler | undefined;
    noise: VRMModelNoise | undefined;
    constructor(configs: VrmServiceConfigs);
    updateModelConfigs(modelConfigs: {
        [boneName: string]: {
            stiffness?: number;
            dragForce?: number;
            hitRadius?: number;
        };
    }): void;
    /**
     * Load VRM model
     */
    loadModel(): void;
    /**
     * Fade to target animation URL
     * @param url VMD / Mixamo FBX Animation. Other formats are not supported at the moment
     * @param loop Whether to loop the selected animation or not
     * @returns
     */
    fadeToAnimationUrl(url: string, loop?: boolean): Promise<void>;
}
export {};
