/**
 * Base class of Exporter nodes
 *
 * @remarks
 */
import { BaseSopNodeType, TypedSopNode } from './_Base';
import { NodeParamsConfig } from '../utils/params/ParamsConfig';
import { CoreGroup } from '../../../core/geometry/Group';
import { Scene } from 'three';
import { Object3D } from 'three';
import { StringParam } from '../../params/String';
type Result = ArrayBuffer | string | object;
export declare class BaseExporterSopParamsConfig extends NodeParamsConfig {
    /** @param fileName */
    fileName: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.STRING>;
    /** @param export */
    download: import("../utils/params/ParamsConfig").ParamTemplate<import("../../index_all").ParamType.BUTTON>;
}
export declare abstract class ExporterSopNode<K extends BaseExporterSopParamsConfig> extends TypedSopNode<K> {
    abstract fileExtension(): string;
    abstract createBlob(): Promise<Blob>;
    initializeNode(): void;
    cook(inputCoreGroups: CoreGroup[]): Promise<void>;
    static PARAM_CALLBACK_download(node: ExporterSopNode<BaseExporterSopParamsConfig>): void;
    fileName(): Promise<string>;
    _paramCallbackDownload(): Promise<void>;
    protected _prepareScene(): Promise<{
        scene: Scene;
        objects: Object3D<import("three").Object3DEventMap>[];
    } | undefined>;
    protected _handleResult(result: Result, objects: Object3D[], resolve: (blob: Blob) => void): void;
}
export declare function exporterSopFileName(fileNameParam: StringParam, fileExtension: string): Promise<string>;
export declare function exporterSopPrepareScene(node: BaseSopNodeType): Promise<{
    scene: Scene;
    objects: Object3D<import("three").Object3DEventMap>[];
} | undefined>;
export declare function exporterSopHandleResult(result: Result, objects: Object3D[], resolve: (blob: Blob) => void): void;
export {};
