/**
 * Copyright (c) 2020-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { WebGLContext } from '../../mol-gl/webgl/context.js';
import { Scene } from '../../mol-gl/scene.js';
import { Vec3, Mat3 } from '../../mol-math/linear-algebra.js';
import { Sphere3D } from '../../mol-math/geometry.js';
import { ParamDefinition as PD } from '../../mol-util/param-definition.js';
import { PickingId } from '../../mol-geo/geometry/picking.js';
import { Camera } from '../camera.js';
import { DataLoci, Loci } from '../../mol-model/loci.js';
import { MarkerAction } from '../../mol-util/marker-action.js';
export declare const HandleHelperParams: {
    handle: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
        alpha: number;
        ignoreLight: boolean;
        colorX: import("../../mol-util/color/index.js").Color;
        colorY: import("../../mol-util/color/index.js").Color;
        colorZ: import("../../mol-util/color/index.js").Color;
        scale: number;
        doubleSided: boolean;
        flipSided: boolean;
        flatShaded: boolean;
        celShaded: boolean;
        xrayShaded: boolean | "inverted";
        transparentBackfaces: "off" | "on" | "opaque";
        bumpFrequency: number;
        bumpAmplitude: number;
        quality: "auto" | "medium" | "high" | "low" | "custom" | "highest" | "higher" | "lower" | "lowest";
        material: PD.Normalize<{
            metalness: number;
            roughness: number;
            bumpiness: number;
        }>;
        clip: PD.Normalize<{
            variant: /*elided*/ any;
            objects: /*elided*/ any;
        }>;
        emissive: number;
        density: number;
        instanceGranularity: boolean;
        lod: Vec3;
        cellSize: number;
        batchSize: number;
    }>, "on">>;
};
export type HandleHelperParams = typeof HandleHelperParams;
export type HandleHelperProps = PD.Values<HandleHelperParams>;
export declare class HandleHelper {
    private webgl;
    scene: Scene;
    props: HandleHelperProps;
    private renderObject;
    private pixelRatio;
    private _transform;
    getBoundingSphere(out: Sphere3D, instanceId: number): Sphere3D;
    setProps(props: Partial<HandleHelperProps>): void;
    get isEnabled(): boolean;
    update(camera: Camera, position: Vec3, rotation: Mat3): void;
    getLoci(pickingId: PickingId): {
        kind: "empty-loci";
    } | DataLoci<HandleHelper, {
        groupId: number;
        instanceId: number;
    }>;
    private eachGroup;
    mark(loci: Loci, action: MarkerAction): boolean;
    constructor(webgl: WebGLContext, props?: Partial<HandleHelperProps>);
}
export declare const HandleGroup: {
    readonly None: 0;
    readonly TranslateScreenXY: 1;
    readonly TranslateObjectX: 3;
    readonly TranslateObjectY: 4;
    readonly TranslateObjectZ: 5;
};
declare function HandleLoci(handleHelper: HandleHelper, groupId: number, instanceId: number): DataLoci<HandleHelper, {
    groupId: number;
    instanceId: number;
}>;
export type HandleLoci = ReturnType<typeof HandleLoci>;
export declare function isHandleLoci(x: Loci): x is HandleLoci;
export {};
