import { TsxAllowUnknowProperties, RichTextEditorStyles } from "../../ux";
import { NodeExtension } from "./NodeExtension";
import { ToolbarExtension, BubbleMenuToolbarExtension } from "./ToolbarExtension";
import { MarkExtension } from "./MarkExtension";
import { EditorExtension } from "./EditorExtension";
import { GuidValue, MultilingualString, RichTextEditorExtensionRegistration, RichTextModes, TipTapEditor } from "../../models";
import { RichTextContentExtensionData, RichTextContentHelper } from "./RichTextContentHelper";
import { IRichTextEditorExtensionHelper } from "./IRichTextEditorExtensionHelper";
export interface IRichTextEditorInstance {
    /**
    * @param content to update
    */
    updateContent(content: string | MultilingualString): any;
}
export declare abstract class RichTextEditorExtension {
    abstract getDefition(options: {
        onEditorUpdated: any;
    }): Promise<RichTextEditorExtensionDefinition>;
}
export interface ToolbarConfigurationBase {
}
export interface MenuConfiguration extends ToolbarConfigurationBase {
}
export interface ToolbarConfiguration {
    configuration: ToolbarConfigurationBase;
    toolbar?: new () => ToolbarExtension;
    hidden?: boolean;
    isSubToolBar?: boolean;
}
export interface BubbleMenuConfiguration {
    menuItem: new () => BubbleMenuToolbarExtension;
    configuration: MenuConfiguration;
    showOnPasted?: boolean;
}
export interface RichTextEditorExtensionDefinition {
    nodes?: Array<NodeExtension | MarkExtension | EditorExtension>;
    toolbarItems?: Array<ToolbarConfiguration>;
    bubbleMenuItems?: Array<BubbleMenuConfiguration>;
    id?: GuidValue;
    onBlur?: (editor: TipTapEditor, setExtensionData: (data: RichTextContentExtensionData) => void) => void;
}
export interface RichTextEditorPlaceHolder {
    emptyNodeText: string;
    emptyClass?: string;
    showOnlyWhenEditable?: boolean;
}
export interface NodeAndToolbarExtension extends RichTextEditorExtension {
}
export interface IRichTextEditor {
    /**
     *
     * */
    initialContent: string;
    bodyClass?: string;
    onContentChange: (content: string, extenres: any) => void;
    onContentDataChange?: (richtextHelper: RichTextContentHelper) => void;
    onInstanceCreated?: (instance: IRichTextEditorInstance) => void;
    onBlur?: () => void;
    onFocus?: () => void;
    registerFocus?: (callback: () => void) => void;
    /**
     * Configure all extesions before passing into RTE
     * @param {RichTextEditorExtension[]} currentExtensions The first number to add.
     * @param {function} registrationResolver Using this callback function to configure extension before passing it to RTE, return null if cannot resolve.
     * @return {RichTextEditorExtension[]} List of extension after configured
     */
    onConfigureExtensions?: (currentExtensions: Array<RichTextEditorExtension>, registrationResolver?: (registration: RichTextEditorExtensionRegistration) => RichTextEditorExtension, extensionHelper?: IRichTextEditorExtensionHelper) => Array<RichTextEditorExtension>;
    styles?: typeof RichTextEditorStyles;
    placeholder?: RichTextEditorPlaceHolder;
    disabled?: boolean;
    outlined?: boolean;
    mode?: RichTextModes;
    resetContent?: boolean;
    autoFocus?: boolean;
    ariaDescribedby?: string;
    ariaInvalid?: boolean;
    disableAutofocus?: boolean;
}
declare global {
    namespace VueTsxSupport.JSX {
        interface Element {
        }
        interface ElementClass {
        }
        interface ElementAttributesProperty {
        }
        interface IntrinsicElements {
            "omfx-rich-text-editor": TsxAllowUnknowProperties<IRichTextEditor>;
        }
    }
}
