/**
 * Copyright (c) 2019-2025 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.js';
import { ImagePass } from '../../mol-canvas3d/passes/image.js';
import { PluginComponent } from '../../mol-plugin-state/component.js';
import { RuntimeContext } from '../../mol-task/index.js';
import { Color } from '../../mol-util/color/index.js';
import { ParamDefinition as PD } from '../../mol-util/param-definition.js';
import { PluginContext } from '../context.js';
export declare namespace ViewportScreenshotHelper {
    type ResolutionSettings = PD.Values<ReturnType<ViewportScreenshotHelper['createParams']>>['resolution'];
    type ResolutionTypes = ResolutionSettings['name'];
}
export type ViewportScreenshotHelperParams = PD.Values<ReturnType<ViewportScreenshotHelper['createParams']>>;
export declare class ViewportScreenshotHelper extends PluginComponent {
    private plugin;
    private createParams;
    private _params;
    get params(): {
        resolution: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "viewport"> | PD.NamedParams<PD.Normalize<{
            width: number;
            height: number;
        }>, "custom"> | PD.NamedParams<PD.Normalize<unknown>, "hd"> | PD.NamedParams<PD.Normalize<unknown>, "full-hd"> | PD.NamedParams<PD.Normalize<unknown>, "ultra-hd">>;
        format: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "png"> | PD.NamedParams<PD.Normalize<{
            quality: number;
        }>, "webp"> | PD.NamedParams<PD.Normalize<{
            quality: number;
        }>, "jpeg">>;
        transparent: PD.BooleanParam;
        axes: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
            alpha: number;
            colorX: Color;
            colorY: Color;
            colorZ: Color;
            scale: number;
            location: "bottom-left" | "bottom-right" | "top-left" | "top-right";
            locationOffsetX: number;
            locationOffsetY: number;
            originColor: Color;
            radiusScale: number;
            showPlanes: boolean;
            planeColorXY: Color;
            planeColorXZ: Color;
            planeColorYZ: Color;
            showLabels: boolean;
            labelX: string;
            labelY: string;
            labelZ: string;
            labelColorX: Color;
            labelColorY: Color;
            labelColorZ: Color;
            labelOpacity: number;
            labelScale: number;
        }>, "on">>;
        illumination: PD.Group<PD.Normalize<{
            extraIterations: number;
            targetIterationTimeMs: number;
        }>>;
    };
    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">>;
            format: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "png"> | PD.NamedParams<PD.Normalize<{
                quality: number;
            }>, "webp"> | PD.NamedParams<PD.Normalize<{
                quality: number;
            }>, "jpeg">>;
            transparent: PD.BooleanParam;
            axes: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
                alpha: number;
                colorX: Color;
                colorY: Color;
                colorZ: Color;
                scale: number;
                location: "bottom-left" | "bottom-right" | "top-left" | "top-right";
                locationOffsetX: number;
                locationOffsetY: number;
                originColor: Color;
                radiusScale: number;
                showPlanes: boolean;
                planeColorXY: Color;
                planeColorXZ: Color;
                planeColorYZ: Color;
                showLabels: boolean;
                labelX: string;
                labelY: string;
                labelZ: string;
                labelColorX: Color;
                labelColorY: Color;
                labelColorZ: Color;
                labelOpacity: number;
                labelScale: number;
            }>, "on">>;
            illumination: PD.Group<PD.Normalize<{
                extraIterations: number;
                targetIterationTimeMs: number;
            }>>;
        }>>;
        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">>;
        format: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "png"> | PD.NamedParams<PD.Normalize<{
            quality: number;
        }>, "webp"> | PD.NamedParams<PD.Normalize<{
            quality: number;
        }>, "jpeg">>;
        transparent: PD.BooleanParam;
        axes: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
            alpha: number;
            colorX: Color;
            colorY: Color;
            colorZ: Color;
            scale: number;
            location: "bottom-left" | "bottom-right" | "top-left" | "top-right";
            locationOffsetX: number;
            locationOffsetY: number;
            originColor: Color;
            radiusScale: number;
            showPlanes: boolean;
            planeColorXY: Color;
            planeColorXZ: Color;
            planeColorYZ: Color;
            showLabels: boolean;
            labelX: string;
            labelY: string;
            labelZ: string;
            labelColorX: Color;
            labelColorY: Color;
            labelColorZ: Color;
            labelOpacity: number;
            labelScale: number;
        }>, "on">>;
        illumination: PD.Group<PD.Normalize<{
            extraIterations: number;
            targetIterationTimeMs: number;
        }>>;
    }>;
    get cropParams(): {
        auto: boolean;
        relativePadding: number;
    };
    get relativeCrop(): Viewport;
    private getCanvasSize;
    private getSize;
    private getPostprocessingProps;
    private getIlluminationProps;
    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(ctx: RuntimeContext, maxDim?: number): Promise<{
        canvas: HTMLCanvasElement;
        width: number;
        height: number;
    } | undefined>;
    getSizeAndViewport(): {
        width: number;
        height: number;
        viewport: Viewport;
    };
    private draw;
    private copyToClipboardTask;
    private get mimeType();
    private get extension();
    private get quality();
    getImageDataUri(): Promise<string>;
    copyToClipboard(): Promise<void> | undefined;
    private downloadTask;
    download(filename?: string): Promise<void>;
    constructor(plugin: PluginContext);
}
