import { ICommandExecutor, IContentManager, ICursorManager, IUndoManager } from '../../typings';
import { IPlugin } from '../../typings/actions/i-plugin';
import { IEditorCore } from '../../typings/status/i-editor-manager';
export type PluginConstructor<T extends IPlugin = IPlugin> = new (editor: IEditorCore) => T;
export type PluginMap<Plugins extends PluginConstructor[]> = {
    [K in Plugins[number] as InstanceType<K>['prefix']]: InstanceType<K>;
};
export interface EditorCoreOptions<Plugins extends PluginConstructor<IPlugin>[]> {
    plugins?: Plugins;
    maxLength: number;
    onChange?: (contentLength: number) => void;
    onUndoChange?: (anchorContent: string) => void;
}
export declare const PARAGRAPH_CLS: string;
export declare const PARAGRAPH_EMPTY: string;
export declare class EditorCore<Plugins extends PluginConstructor[] = []> extends IEditorCore {
    private _observer;
    private _onchange?;
    readonly _editorElement: HTMLElement;
    readonly _uid: string;
    content: IContentManager;
    cursor: ICursorManager;
    undo: IUndoManager;
    command: ICommandExecutor;
    maxLength: number;
    plugin: PluginMap<Plugins>;
    constructor(editorElement: HTMLDivElement, options?: EditorCoreOptions<Plugins>);
    destroy(): void;
    editorTop(): number;
    editorLeft(): number;
    appendContent(content: string | string[]): void;
    get element(): HTMLElement;
    private _setup;
    private _teardown;
    private _handleBackspace;
    private _handlePaste;
    private _handleBeforeInput;
    private _handleCompositionEnd;
}
