import { IDisposable } from "../Interfaces/IDisposable";
import { Nullable } from "../types";
import { MaterialType, SceneEditor, SceneEditorOptions } from "./SceneEditor";
export type MaterialEditorOptions = SceneEditorOptions & {};
export declare enum EditorMeshType {
    Box = 0,
    RoundedBox = 1,
    Sphere = 2,
    Plane = 3,
    Cylinder = 4,
    RoundedCylinder = 5,
    Torus = 6,
    Knot = 7,
    Ribbon = 8,
    Custom = 9
}
export type MaterialCreatedEventHandler = () => void;
export type MaterialTextureInfo = {
    materialID?: string;
    fileObjectID?: number;
    imageUrl?: string;
};
export declare class MaterialEditor extends SceneEditor implements IDisposable {
    private _zkMaterial;
    private _material;
    private _meshType;
    private _mesh;
    private _materialCreatedListeners;
    private _filesInput;
    get zkMaterial(): Nullable<Zakeke.Material>;
    get material(): Nullable<BABYLON.Material>;
    protected constructor(options?: MaterialEditorOptions);
    static createMaterialEditorAsync(options?: MaterialEditorOptions): Promise<MaterialEditor>;
    protected deleteComponents(): void;
    protected deleteEditorMaterial(): void;
    protected deleteEditorMesh(): void;
    dispose(): void;
    createEmptySceneAsync(): Promise<void>;
    createEditorMaterial(name?: string, type?: MaterialType | "ShaderMaterial", group?: string): Nullable<BABYLON.Material>;
    protected applyEditorMaterial(): void;
    protected replaceSceneAsync(newScene: BABYLON.Scene): Promise<void>;
    private createShaderMaterial;
    private createEditorMaterialFromJson;
    protected createEditorMeshAsync(): Promise<void>;
    setEditorMeshType(meshType: EditorMeshType): Promise<void>;
    updateMaterialModelAsync(): Promise<void>;
    private getEditorMaterialJson;
    setMaterialModel(zkMaterial: Zakeke.Material, type?: MaterialType | "ShaderMaterial"): void;
    protected getTexturesUploadUrl(materialID: string): string;
    loadEditorMaterialTextureFiles__(filesToLoad: File[], type: string, onSuccess?: () => void, onError?: (reason: any) => void): void;
    loadEditorMaterialTextureFiles(filesToLoad: File[], type: string, onSuccess?: () => void, onError?: (reason: any) => void): void;
    private setEditorMaterialTextureImage;
    private setEditorMaterialCubeTextureImages;
    protected fireMaterialCreatedEvent(): void;
    addMaterialCreatedListener(listenerFunction: MaterialCreatedEventHandler): void;
    loadFiles(event: any, onSuccess: () => void, onError: (reason: string) => void): void;
}
