/**
 * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author David Sehnal <david.sehnal@gmail.com>
 */
import { PluginContext } from '../../../mol-plugin/context.js';
import { StateBuilder, StateObjectRef, StateObjectSelector, StateTransform } from '../../../mol-state/index.js';
import { ParamDefinition as PD } from '../../../mol-util/param-definition.js';
import { StructureRepresentationBuiltInProps, StructureRepresentationProps } from '../../helpers/structure-representation-params.js';
import { PluginStateObject } from '../../objects.js';
import { PresetStructureRepresentations, StructureRepresentationPresetProvider } from './representation-preset.js';
export type StructureRepresentationPresetProviderRef = keyof PresetStructureRepresentations | StructureRepresentationPresetProvider | string;
export declare class StructureRepresentationBuilder {
    plugin: PluginContext;
    private _providers;
    private providerMap;
    private get dataState();
    readonly defaultProvider: StructureRepresentationPresetProvider<{
        ignoreHydrogens: boolean | undefined;
        ignoreHydrogensVariant: "all" | "non-polar" | undefined;
        ignoreLight: boolean | undefined;
        quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest" | undefined;
        theme: PD.Normalize<{
            globalName: /*elided*/ any;
            globalColorParams: /*elided*/ any;
            carbonColor: /*elided*/ any;
            symmetryColor: /*elided*/ any;
            symmetryColorParams: /*elided*/ any;
            focus: /*elided*/ any;
        }> | undefined;
    }, {
        components?: undefined;
        representations?: undefined;
    } | {
        components: {
            polymer: StateObjectSelector<PluginStateObject.Molecule.Structure, import("../../../mol-state/index.js").StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>> | undefined;
        };
        representations: {
            polymer: StateObjectSelector<PluginStateObject.Molecule.Structure.Representation3D, import("../../../mol-state/index.js").StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>;
        };
    } | {
        components: {
            all: StateObjectSelector<PluginStateObject.Molecule.Structure, import("../../../mol-state/index.js").StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>> | undefined;
            branched: undefined;
        };
        representations: {
            all: StateObjectSelector<PluginStateObject.Molecule.Structure.Representation3D, import("../../../mol-state/index.js").StateTransformer<import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, import("../../../mol-state/index.js").StateObject<any, import("../../../mol-state/index.js").StateObject.Type<any>>, any>>;
        };
    }>;
    resolveProvider(ref: StructureRepresentationPresetProviderRef): StructureRepresentationPresetProvider<unknown, {}>;
    hasPreset(s: PluginStateObject.Molecule.Structure): boolean;
    get providers(): ReadonlyArray<StructureRepresentationPresetProvider>;
    getPresets(s?: PluginStateObject.Molecule.Structure): readonly StructureRepresentationPresetProvider<any, StructureRepresentationPresetProvider.Result>[];
    getPresetSelect(s?: PluginStateObject.Molecule.Structure): PD.Select<string>;
    getPresetsWithOptions(s: PluginStateObject.Molecule.Structure): PD.Mapped<PD.NamedParams<any, string>>;
    registerPreset(provider: StructureRepresentationPresetProvider): void;
    unregisterPreset(provider: StructureRepresentationPresetProvider): void;
    applyPreset<K extends keyof PresetStructureRepresentations>(parent: StateObjectRef<PluginStateObject.Molecule.Structure>, preset: K, params?: StructureRepresentationPresetProvider.Params<PresetStructureRepresentations[K]>): Promise<StructureRepresentationPresetProvider.State<PresetStructureRepresentations[K]>> | undefined;
    applyPreset<P = any, S extends {} = {}>(parent: StateObjectRef<PluginStateObject.Molecule.Structure>, provider: StructureRepresentationPresetProvider<P, S>, params?: P): Promise<S> | undefined;
    applyPreset(parent: StateObjectRef<PluginStateObject.Molecule.Structure>, providerId: string, params?: any): Promise<any> | undefined;
    addRepresentation<P extends StructureRepresentationBuiltInProps>(structure: StateObjectRef<PluginStateObject.Molecule.Structure>, props: P, options?: Partial<StructureRepresentationBuilder.AddRepresentationOptions>): Promise<StateObjectSelector<PluginStateObject.Molecule.Structure.Representation3D>>;
    addRepresentation<P extends StructureRepresentationProps>(structure: StateObjectRef<PluginStateObject.Molecule.Structure>, props: P, options?: Partial<StructureRepresentationBuilder.AddRepresentationOptions>): Promise<StateObjectSelector<PluginStateObject.Molecule.Structure.Representation3D>>;
    buildRepresentation<P extends StructureRepresentationBuiltInProps>(builder: StateBuilder.Root, structure: StateObjectRef<PluginStateObject.Molecule.Structure> | undefined, props: P, options?: Partial<StructureRepresentationBuilder.AddRepresentationOptions>): StateObjectSelector<PluginStateObject.Molecule.Structure.Representation3D>;
    buildRepresentation<P extends StructureRepresentationProps>(builder: StateBuilder.Root, structure: StateObjectRef<PluginStateObject.Molecule.Structure> | undefined, props: P, options?: Partial<StructureRepresentationBuilder.AddRepresentationOptions>): StateObjectSelector<PluginStateObject.Molecule.Structure.Representation3D>;
    constructor(plugin: PluginContext);
}
export declare namespace StructureRepresentationBuilder {
    interface AddRepresentationOptions {
        initialState?: Partial<StateTransform.State>;
        tag?: string;
    }
}
