/**
 * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author David Sehnal <david.sehnal@gmail.com>
 */
import { State, StateTransform, StateTransformer } from '../mol-state';
import { Camera } from '../mol-canvas3d/camera';
import { Canvas3DProps } from '../mol-canvas3d/canvas3d';
import { PluginAnimationManager } from '../mol-plugin-state/manager/animation';
import { ParamDefinition as PD } from '../mol-util/param-definition';
import { UUID } from '../mol-util';
import { InteractivityManager } from '../mol-plugin-state/manager/interactivity';
import { StructureFocusSnapshot } from '../mol-plugin-state/manager/structure/focus';
import { PluginContext } from './context';
import { PluginComponent } from '../mol-plugin-state/component';
export { PluginState };
declare class PluginState extends PluginComponent {
    private plugin;
    private get animation();
    readonly data: State;
    readonly behaviors: State;
    readonly events: {
        readonly cell: {
            readonly stateUpdated: import("rxjs").Observable<State.ObjectEvent & {
                cell: import("../mol-state/object").StateObjectCell<import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>, StateTransform<StateTransformer<import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>, import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>, any>>>;
            }>;
            readonly created: import("rxjs").Observable<State.ObjectEvent & {
                cell: import("../mol-state/object").StateObjectCell<import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>, StateTransform<StateTransformer<import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>, import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>, any>>>;
            }>;
            readonly removed: import("rxjs").Observable<State.ObjectEvent & {
                parent: string;
            }>;
        };
        readonly object: {
            readonly created: import("rxjs").Observable<State.ObjectEvent & {
                obj: import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>;
            }>;
            readonly removed: import("rxjs").Observable<State.ObjectEvent & {
                obj?: import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>> | undefined;
            }>;
            readonly updated: import("rxjs").Observable<State.ObjectEvent & {
                action: "in-place" | "recreate";
                obj: import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>>;
                oldObj?: import("../mol-state/object").StateObject<any, import("../mol-state/object").StateObject.Type<any>> | undefined;
                oldData?: any;
            }>;
        };
    };
    readonly snapshotParams: import("rxjs").BehaviorSubject<Partial<PD.Values<{
        durationInMs: PD.Numeric;
        data: PD.BooleanParam;
        behavior: PD.BooleanParam;
        animation: PD.BooleanParam;
        startAnimation: PD.BooleanParam;
        canvas3d: PD.BooleanParam;
        interactivity: PD.BooleanParam;
        camera: PD.BooleanParam;
        cameraTransition: PD.Mapped<PD.NamedParams<PD.Normalize<{
            durationInMs: number;
        }>, "animate"> | PD.NamedParams<PD.Normalize<unknown>, "instant">>;
    }>>>;
    setSnapshotParams: (params?: Partial<PD.Values<{
        durationInMs: PD.Numeric;
        data: PD.BooleanParam;
        behavior: PD.BooleanParam;
        animation: PD.BooleanParam;
        startAnimation: PD.BooleanParam;
        canvas3d: PD.BooleanParam;
        interactivity: PD.BooleanParam;
        camera: PD.BooleanParam;
        cameraTransition: PD.Mapped<PD.NamedParams<PD.Normalize<{
            durationInMs: number;
        }>, "animate"> | PD.NamedParams<PD.Normalize<unknown>, "instant">>;
    }>> | undefined) => void;
    getSnapshot(params?: PluginState.SnapshotParams): PluginState.Snapshot;
    setSnapshot(snapshot: PluginState.Snapshot): Promise<void>;
    updateTransform(state: State, a: StateTransform.Ref, params: any, canUndo?: string | boolean): Promise<void>;
    updateBehavior<T extends StateTransformer>(behavior: T, params: (old: StateTransformer.Params<T>) => (void | StateTransformer.Params<T>)): Promise<void>;
    dispose(): void;
    constructor(plugin: PluginContext);
}
declare namespace PluginState {
    type CameraTransitionStyle = 'instant' | 'animate';
    const SnapshotParams: {
        durationInMs: PD.Numeric;
        data: PD.BooleanParam;
        behavior: PD.BooleanParam;
        animation: PD.BooleanParam;
        startAnimation: PD.BooleanParam;
        canvas3d: PD.BooleanParam;
        interactivity: PD.BooleanParam;
        camera: PD.BooleanParam;
        cameraTransition: PD.Mapped<PD.NamedParams<PD.Normalize<{
            durationInMs: number;
        }>, "animate"> | PD.NamedParams<PD.Normalize<unknown>, "instant">>;
    };
    type SnapshotParams = Partial<PD.Values<typeof SnapshotParams>>;
    const DefaultSnapshotParams: PD.Values<{
        durationInMs: PD.Numeric;
        data: PD.BooleanParam;
        behavior: PD.BooleanParam;
        animation: PD.BooleanParam;
        startAnimation: PD.BooleanParam;
        canvas3d: PD.BooleanParam;
        interactivity: PD.BooleanParam;
        camera: PD.BooleanParam;
        cameraTransition: PD.Mapped<PD.NamedParams<PD.Normalize<{
            durationInMs: number;
        }>, "animate"> | PD.NamedParams<PD.Normalize<unknown>, "instant">>;
    }>;
    interface Snapshot {
        id: UUID;
        data?: State.Snapshot;
        behaviour?: State.Snapshot;
        animation?: PluginAnimationManager.Snapshot;
        startAnimation?: boolean;
        camera?: {
            current: Camera.Snapshot;
            transitionStyle: CameraTransitionStyle;
            transitionDurationInMs?: number;
        };
        canvas3d?: {
            props?: Canvas3DProps;
        };
        interactivity?: {
            props?: InteractivityManager.Props;
        };
        structureFocus?: StructureFocusSnapshot;
        durationInMs?: number;
    }
    type SnapshotType = 'json' | 'molj' | 'zip' | 'molx';
}
