import { AViewerPluginEventMap, AViewerPluginSync, ThreeViewer } from '../../viewer';
import { UiObjectConfig } from 'uiconfig.js';
import { AnimationResult, PopmotionPlugin } from './PopmotionPlugin';
import { AnimationObject, AnimationObjectEventMap } from '../../utils/AnimationObject';
import { IMaterial, IObject3D } from '../../core';
export interface AnimationObjectPluginEventMap extends AViewerPluginEventMap, AnimationObjectEventMap {
    rebuildTimeline: {
        timeline: [AnimationObject, AnimationResult][];
    };
    animationUpdate: {
        animation: AnimationObject;
    };
}
/**
 * Animation Object Plugin
 *
 * This plugin allows you to create and manage animation objects for properties in the viewer, plugins, objects, materials etc.
 * Animation objects are serializable javascript objects that bind to a property, and can animate it over time across keyframes.
 *
 * Animation Object plugin adds support for creating animations bound to viewer and plugins and serializing them along with this plugin.
 * Also adds support for tracking and playback of animation objects in the userData of objects and materials.
 *
 * All the tracked animations are played on load and synced with the viewer timeline if its active.
 *
 * This plugin also adds trigger buttons for creating and editing animation objects, keyframes, for the ui config.
 */
export declare class AnimationObjectPlugin extends AViewerPluginSync<AnimationObjectPluginEventMap> {
    static readonly PluginType = "AnimationObjectPlugin";
    enabled: boolean;
    dependencies: (typeof PopmotionPlugin)[];
    /**
     * Main animation with target = viewer for global properties
     */
    readonly animation: AnimationObject;
    readonly runtimeAnimation: AnimationObject;
    getAllAnimations(): AnimationObject<any>[];
    private _fAnimationAdd;
    private _fAnimationRemove;
    private _fAnimationUpdate;
    private _viewerTimelineUpdate;
    private _refreshTriggerBtn;
    private _getActiveIndex;
    private _triggerButtonsShown;
    get triggerButtonsShown(): boolean;
    set triggerButtonsShown(v: boolean);
    showTriggers(v?: boolean): void;
    constructor();
    private _currentTimeline;
    private _refTimeline;
    rebuildTimeline(): void;
    protected _viewerListeners: {
        postFrame: () => void;
    };
    getTimeline(): [AnimationObject<any>, AnimationResult][];
    addAnimation(access?: string, target?: any, anim?: AnimationObject): AnimationObject<any>;
    removeAnimation(anim: AnimationObject, target?: any): void;
    private _objectAdd;
    private _objectRemove;
    private _materialAdd;
    private _materialRemove;
    private _addAnimationObject;
    private _removeAnimationObject;
    private _removeAnimationFromObject;
    private _visibleBtns;
    private _iObservers;
    private _setupUiConfig;
    private _cleanUpUiConfig;
    private _setupUiConfigButtons;
    private _cleanupUiConfigButtons;
    setupUiConfigButton(obj: IObject3D | IMaterial, config: UiObjectConfig, path?: string): void;
    cleanupUiConfigButton(config?: UiObjectConfig): void;
    private _setBtnVisible;
    private _animatableUiConfigs;
    private _objectUpdate;
    onAdded(viewer: ThreeViewer): void;
    onRemove(viewer: ThreeViewer): void;
    fromJSON(data: any, meta?: any): this | null;
    uiConfig: UiObjectConfig;
}
declare module '../../assetmanager/IAssetImporter' {
    interface IImportResultUserData {
        animationObjects?: AnimationObject[];
    }
}
//# sourceMappingURL=../../src/plugins/animation/AnimationObjectPlugin.d.ts.map