/**
 * Copyright (c) 2019-2021 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author David Sehnal <david.sehnal@gmail.com>
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { Viewport } from '../../mol-canvas3d/camera/util';
import { ImagePass } from '../../mol-canvas3d/passes/image';
import { PluginComponent } from '../../mol-plugin-state/component';
import { Color } from '../../mol-util/color';
import { ParamDefinition as PD } from '../../mol-util/param-definition';
import { PluginContext } from '../context';
export { ViewportScreenshotHelper, ViewportScreenshotHelperParams };
declare namespace ViewportScreenshotHelper {
    type ResolutionSettings = PD.Values<ReturnType<ViewportScreenshotHelper['createParams']>>['resolution'];
    type ResolutionTypes = ResolutionSettings['name'];
}
declare type ViewportScreenshotHelperParams = PD.Values<ReturnType<ViewportScreenshotHelper['createParams']>>;
declare class ViewportScreenshotHelper extends PluginComponent {
    private plugin;
    private createParams;
    private _params;
    get params(): {
        resolution: PD.Mapped<PD.NamedParams<PD.Normalize<{
            width: number;
            height: number;
        }>, "custom"> | PD.NamedParams<PD.Normalize<unknown>, "viewport"> | PD.NamedParams<PD.Normalize<unknown>, "hd"> | PD.NamedParams<PD.Normalize<unknown>, "full-hd"> | PD.NamedParams<PD.Normalize<unknown>, "ultra-hd">>;
        transparent: PD.BooleanParam;
        axes: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
            alpha: number;
            ignoreLight: boolean;
            colorX: Color;
            colorY: Color;
            colorZ: Color;
            scale: number;
            doubleSided: boolean;
            flipSided: boolean;
            flatShaded: boolean;
            xrayShaded: boolean;
            quality: "custom" | "auto" | "highest" | "higher" | "high" | "medium" | "low" | "lower" | "lowest";
        }>, "on">>;
    };
    readonly behaviors: {
        values: import("rxjs").BehaviorSubject<PD.Values<{
            resolution: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "viewport"> | PD.NamedParams<PD.Normalize<unknown>, "hd"> | PD.NamedParams<PD.Normalize<unknown>, "full-hd"> | PD.NamedParams<PD.Normalize<unknown>, "ultra-hd"> | PD.NamedParams<PD.Normalize<{
                width: number;
                height: number;
            }>, "custom">>;
            transparent: PD.BooleanParam;
            axes: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
                alpha: number;
                ignoreLight: boolean;
                colorX: Color;
                colorY: Color;
                colorZ: Color;
                scale: number;
                doubleSided: boolean;
                flipSided: boolean;
                flatShaded: boolean;
                xrayShaded: boolean;
                quality: "custom" | "auto" | "highest" | "higher" | "high" | "medium" | "low" | "lower" | "lowest";
            }>, "on">>;
        }>>;
        cropParams: import("rxjs").BehaviorSubject<{
            auto: boolean;
            relativePadding: number;
        }>;
        relativeCrop: import("rxjs").BehaviorSubject<Viewport>;
    };
    readonly events: {
        previewed: import("rxjs").Subject<any>;
    };
    get values(): PD.Values<{
        resolution: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "viewport"> | PD.NamedParams<PD.Normalize<unknown>, "hd"> | PD.NamedParams<PD.Normalize<unknown>, "full-hd"> | PD.NamedParams<PD.Normalize<unknown>, "ultra-hd"> | PD.NamedParams<PD.Normalize<{
            width: number;
            height: number;
        }>, "custom">>;
        transparent: PD.BooleanParam;
        axes: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
            alpha: number;
            ignoreLight: boolean;
            colorX: Color;
            colorY: Color;
            colorZ: Color;
            scale: number;
            doubleSided: boolean;
            flipSided: boolean;
            flatShaded: boolean;
            xrayShaded: boolean;
            quality: "custom" | "auto" | "highest" | "higher" | "high" | "medium" | "low" | "lower" | "lowest";
        }>, "on">>;
    }>;
    get cropParams(): {
        auto: boolean;
        relativePadding: number;
    };
    get relativeCrop(): Viewport;
    private getCanvasSize;
    private getSize;
    private createPass;
    private _previewPass;
    private get previewPass();
    private _imagePass;
    get imagePass(): ImagePass;
    getFilename(extension?: string): string;
    private canvas;
    private previewCanvas;
    private previewData;
    resetCrop(): void;
    toggleAutocrop(): void;
    get isFullFrame(): boolean;
    autocrop(relativePadding?: number): void;
    getPreview(maxDim?: number): {
        canvas: HTMLCanvasElement;
        width: number;
        height: number;
    } | undefined;
    getSizeAndViewport(): {
        width: number;
        height: number;
        viewport: Viewport;
    };
    private draw;
    private copyToClipboardTask;
    getImageDataUri(): Promise<string>;
    copyToClipboard(): Promise<void> | undefined;
    private downloadTask;
    download(filename?: string): void;
    constructor(plugin: PluginContext);
}
