/**
 * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author David Sehnal <david.sehnal@gmail.com>
 */
import { StructureElement } from '../../../mol-model/structure';
import { PluginContext } from '../../../mol-plugin/context';
import { StateTransform, StateTransformer, StateObjectCell } from '../../../mol-state';
import { StateTransforms } from '../../transforms';
import { PluginStateObject } from '../../objects';
import { StatefulPluginComponent } from '../../component';
import { ParamDefinition as PD } from '../../../mol-util/param-definition';
import { LociLabelTextParams } from '../../../mol-repr/shape/loci/common';
import { LineParams } from '../../../mol-repr/structure/representation/line';
export { StructureMeasurementManager };
export declare const MeasurementGroupTag = "measurement-group";
export declare type StructureMeasurementCell = StateObjectCell<PluginStateObject.Shape.Representation3D, StateTransform<StateTransformer<PluginStateObject.Molecule.Structure.Selections, PluginStateObject.Shape.Representation3D, any>>>;
export declare const StructureMeasurementParams: {
    distanceUnitLabel: PD.Text<string>;
    textColor: PD.Color;
};
export declare type StructureMeasurementOptions = PD.ValuesFor<typeof StructureMeasurementParams>;
export interface StructureMeasurementManagerState {
    labels: StructureMeasurementCell[];
    distances: StructureMeasurementCell[];
    angles: StructureMeasurementCell[];
    dihedrals: StructureMeasurementCell[];
    orientations: StructureMeasurementCell[];
    options: StructureMeasurementOptions;
}
declare type StructureMeasurementManagerAddOptions = {
    customText?: string;
    selectionTags?: string | string[];
    reprTags?: string | string[];
    lineParams?: Partial<PD.Values<LineParams>>;
    labelParams?: Partial<PD.Values<LociLabelTextParams>>;
};
declare class StructureMeasurementManager extends StatefulPluginComponent<StructureMeasurementManagerState> {
    private plugin;
    readonly behaviors: {
        state: import("rxjs").BehaviorSubject<StructureMeasurementManagerState>;
    };
    private stateUpdated;
    private getGroup;
    setOptions(options: StructureMeasurementOptions): Promise<void>;
    addDistance(a: StructureElement.Loci, b: StructureElement.Loci, options?: StructureMeasurementManagerAddOptions & {
        visualParams?: Partial<StateTransformer.Params<typeof StateTransforms.Representation.StructureSelectionsDistance3D>>;
    }): Promise<void>;
    addAngle(a: StructureElement.Loci, b: StructureElement.Loci, c: StructureElement.Loci, options?: StructureMeasurementManagerAddOptions & {
        visualParams?: Partial<StateTransformer.Params<typeof StateTransforms.Representation.StructureSelectionsAngle3D>>;
    }): Promise<void>;
    addDihedral(a: StructureElement.Loci, b: StructureElement.Loci, c: StructureElement.Loci, d: StructureElement.Loci, options?: StructureMeasurementManagerAddOptions & {
        visualParams?: Partial<StateTransformer.Params<typeof StateTransforms.Representation.StructureSelectionsDihedral3D>>;
    }): Promise<void>;
    addLabel(a: StructureElement.Loci, options?: Omit<StructureMeasurementManagerAddOptions, 'customText' | 'lineParams'> & {
        visualParams?: Partial<StateTransformer.Params<typeof StateTransforms.Representation.StructureSelectionsLabel3D>>;
    }): Promise<void>;
    addOrientation(a: StructureElement.Loci): Promise<void>;
    private _empty;
    private getTransforms;
    private sync;
    constructor(plugin: PluginContext);
}
