import React, { CSSProperties } from 'react';
import { UnlayerEmbed, DisplayMode, UnlayerEditor, UnlayerOptions, CallbackTypeMap, AppearanceConfig, ToolsConfig } from '@unlayer/types';

interface EditorRef<TDisplayMode extends DisplayMode | undefined = 'email'> {
    editor: UnlayerEditor<TDisplayMode> | null;
}
interface EmailEditorProps<TDisplayMode extends DisplayMode | undefined = 'email'> {
    editorId?: string | undefined;
    minHeight?: number | string | undefined;
    onLoad?(unlayer: UnlayerEditor<TDisplayMode>): void;
    onReady?(unlayer: UnlayerEditor<TDisplayMode>): void;
    options?: Omit<UnlayerOptions, 'displayMode'> & {
        displayMode?: TDisplayMode;
    };
    scriptUrl?: string | undefined;
    style?: CSSProperties | undefined;
    onDesignLoad?: CallbackTypeMap<TDisplayMode>['onDesignLoad'];
    onDesignUpdated?: CallbackTypeMap<TDisplayMode>['design:updated'];
    onImageUpload?: CallbackTypeMap<TDisplayMode>['onImageUpload'];
    [event: `on${string}`]: ((...args: any[]) => void) | undefined;
    /** @deprecated */
    appearance?: AppearanceConfig | undefined;
    /** @deprecated Use options.displayMode instead */
    displayMode?: TDisplayMode;
    /** @deprecated */
    locale?: string | undefined;
    /** @deprecated */
    projectId?: number | undefined;
    /** @deprecated */
    tools?: ToolsConfig | undefined;
}
declare global {
    const unlayer: UnlayerEmbed;
    interface Window {
        __unlayer_lastEditorId: number;
    }
}

declare const EmailEditor: <TDisplayMode extends DisplayMode | undefined = "email">(props: EmailEditorProps<TDisplayMode> & React.RefAttributes<EditorRef<TDisplayMode>>) => React.ReactElement | null;

export { type EditorRef, EmailEditor, type EmailEditorProps, EmailEditor as default };
