import { Component, Observer, L10n, KeyboardEventArgs, EmitType } from '@syncfusion/ej2-base';
import { ItemModel, OverflowMode } from '@syncfusion/ej2-navigations';
import { ItemModel as DropDownItemModel, DropDownButton } from '@syncfusion/ej2-splitbuttons';
import { ToolbarType, RenderType, ImageInputSource, DialogType } from './enum';
import { Toolbar } from '../actions/toolbar';
import { UndoRedoManager } from '../../editor-manager/plugin/undo';
import { ClickEventArgs } from '@syncfusion/ej2-navigations';
import { BaseToolbar } from '../actions/base-toolbar';
import { BaseQuickToolbar } from '../actions/base-quick-toolbar';
import { NodeSelection } from '../../selection/selection';
import { EditorMode, EnterKey, ShiftEnterKey } from './../../common/types';
import { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';
import { ToolbarSettingsModel, IFrameSettingsModel, ImageSettingsModel, AudioSettingsModel, VideoSettingsModel, TableSettingsModel, FormatPainterSettingsModel, EmojiSettingsModel, ImportWordModel, ExportWordModel, ExportPdfModel } from '../models/models';
import { QuickToolbarSettingsModel, InlineModeModel, PasteCleanupSettingsModel, FileManagerSettingsModel } from '../models/models';
import { Count } from '../actions/count';
import { ColorPicker, ColorPickerEventArgs, ColorPickerModel, FileInfo } from '@syncfusion/ej2-inputs';
import { Link } from '../renderer/link-module';
import { Image } from '../renderer/image-module';
import { Audio } from '../renderer/audio-module';
import { Video } from '../renderer/video-module';
import { Table } from '../renderer/table-module';
import { ServiceLocator } from '../services/service-locator';
import { UndoRedoCommands } from '../../markdown-parser/plugin/undo';
import { MDSelectionFormats } from '../../markdown-parser/plugin/md-selection-formats';
import { QuickToolbar } from '../actions/quick-toolbar';
import { HtmlEditor } from '../actions/html-editor';
import { MarkdownEditor } from '../actions/markdown-editor';
import { FullScreen } from '../actions/full-screen';
import { DropDownButtons } from '../actions/dropdown-buttons';
import { IToolbarStatus } from '../../common/interface';
import { KeyboardEvents } from '../actions/keyboard';
import { ViewSource } from '../renderer/view-source';
import { PasteCleanup } from '../actions/paste-clean-up';
import { Popup } from '@syncfusion/ej2-popups';
import { Resize } from '../actions/resize';
import { FileManager } from '../actions/file-manager';
import { NodeCutter, DOMNode, IFormatPainterEditor } from '../../editor-manager';
import { EnterKeyAction } from '../actions/enter-key';
import { EmojiPicker } from '../actions/emoji-picker';
import { SlashMenuSettingsModel } from '../models/slash-menu-settings-model';
import { CustomUserAgentData } from '../../common/user-agent';
/**
 * Specifies Rich Text Editor interfaces.
 *
 * @hidden

 */
export interface IRichTextEditor extends Component<HTMLElement> {
    /**
     * Provides data about the user agent, platform and then whether its a mobile device.
     *
     * @hidden
     *
     */
    userAgentData: CustomUserAgentData;
    /**
     * Specifies the root container of the Rich Text Editor component.
     *
     **/
    rootContainer: HTMLElement;
    toolbarSettings?: ToolbarSettingsModel;
    quickToolbarSettings?: QuickToolbarSettingsModel;
    iframeSettings?: IFrameSettingsModel;
    /**
     * Configures the image settings of the RTE.
     *
     * @default
     * {
     * allowedTypes: ['jpeg', 'jpg', 'png'],
     * display: 'inline', width: '200px', saveFormat: 'Base64',
     * height: '200px', saveUrl:null, path: null, resize: false
     * }
     */
    insertImageSettings: ImageSettingsModel;
    /**
     * Configures the import word of the RTE.
     *
     * @default
     * {
     * serviceUrl:null,
     * }
     */
    importWord: ImportWordModel;
    /**
     * Configures the export word of the RTE.
     *
     * @default
     * {
     * serviceUrl:null, fileName:Sample.docx, stylesheet: null,
     * }
     */
    exportWord: ExportWordModel;
    /**
     * Configures the export pdf of the RTE.
     *
     * @default
     * {
     * serviceUrl:null, fileName:Sample.pdf, stylesheet: null,
     * }
     */
    exportPdf: ExportPdfModel;
    /**
     * Configures the image settings of the RTE.
     *
     * @default
     * {
     * allowedTypes: ['wav', 'mp3', 'm4a','wma'],
     * layoutOption: 'Inline', saveFormat: 'Blob',
     * saveUrl:null, path: null,
     * }
     */
    insertAudioSettings: AudioSettingsModel;
    /**
     * Configures the video settings of the RTE.
     *
     * @default
     * {
     * allowedTypes: ['mp4', 'mov', 'wmv', 'avi'],
     * layoutOption: 'Inline', width: '200px', saveFormat: 'Blob',
     * height: '200px', saveUrl:null, path: null, resize: false
     * }
     */
    insertVideoSettings: VideoSettingsModel;
    fileManagerSettings: FileManagerSettingsModel;
    tableSettings: TableSettingsModel;
    pasteCleanupSettings: PasteCleanupSettingsModel;
    /**
     * Configure the format painter settings of the RTE.
     *
     * @default
     * {
     * allowedFormats: 'b; em; font; sub; sup; kbd; i; s; u; code; strong; span; p; div; h1; h2; h3; h4; h5; h6; blockquote; table; thead; tbody; tr; td; th; ol; ul; li; pre;',
     * deniedFormats: null
     * }
     */
    formatPainterSettings: FormatPainterSettingsModel;
    emojiPickerSettings: EmojiSettingsModel;
    floatingToolbarOffset?: number;
    showCharCount?: boolean;
    enableTabKey?: boolean;
    maxLength?: number;
    inlineMode?: InlineModeModel;
    width?: string | number;
    height?: string | number;
    fontFamily?: IFontProperties;
    fontSize?: IFontProperties;
    fontColor?: IColorProperties;
    numberFormatList?: INumberFormatListPropertiesProperties;
    bulletFormatList?: IBulletFormatListPropertiesProperties;
    backgroundColor?: IColorProperties;
    format?: IFormatProperties;
    value?: string;
    saveInterval?: number;
    showTooltip?: boolean;
    isBlur?: boolean;
    isRTE?: boolean;
    contentModule?: IRenderer;
    enabled?: boolean;
    readonly?: boolean;
    placeholder?: string;
    cssClass?: string;
    valueContainer?: HTMLTextAreaElement;
    editorMode?: EditorMode;
    enableHtmlEncode?: boolean;
    formatter?: IFormatter;
    inputElement?: HTMLElement;
    toolbarModule?: Toolbar;
    tableModule?: Table;
    fileManagerModule?: FileManager;
    sourceCodeModule?: ViewSource;
    getToolbarElement?(): Element;
    fullScreenModule?: FullScreen;
    resizeModule?: Resize;
    refreshUI?(): void;
    enterKeyModule?: EnterKeyAction;
    enterKey?: EnterKey;
    shiftEnterKey?: ShiftEnterKey;
    audioModule?: Audio;
    videoModule?: Video;
    pasteCleanupModule?: PasteCleanup;
    undoRedoModule?: UndoRedoManager;
    quickToolbarModule?: QuickToolbar;
    undoRedoSteps?: number;
    markdownEditorModule: MarkdownEditor;
    htmlEditorModule: HtmlEditor;
    countModule?: Count;
    formatPainterModule?: IFormatPainter;
    emojiPickerModule?: EmojiPicker;
    serviceLocator?: ServiceLocator;
    setEnable?(): void;
    setReadOnly?(isInit?: boolean): void;
    setPlaceHolder?(): void;
    updateValue?(): void;
    print(): void;
    getContent?(): Element;
    setRTEContent?(value: Element): void;
    ensureModuleInjected(module: object): boolean;
    getToolbar(): HTMLElement;
    getTBarItemsIndex?(items: string[]): number[];
    getCollection?(items: string | string[]): string[];
    getRange(): Range;
    getID(): string;
    getCssClass(isSpace?: boolean): string;
    getText(): string;
    updateValueData?(): void;
    getBaseToolbarObject(): BaseToolbar;
    keyConfig?: {
        [key: string]: string;
    };
    undoRedoTimer?: number;
    sourceCode?(): void;
    enableToolbarItem?(items: string | string[]): void;
    disableToolbarItem?(items: string | string[]): void;
    wireScrollElementsEvents?(): void;
    unWireScrollElementsEvents?(): void;
    keyDown?(e?: KeyboardEvent): void;
    keyboardModule?: KeyboardEvents;
    onCopy?(): void;
    onCut?(): void;
    onPaste?(): void;
    clipboardAction?: Function;
    localeObj?: L10n;
    invokeChangeEvent?(): void;
    addAudioVideoWrapper?(): void;
    preventDefaultResize?(e?: FocusEvent | MouseEvent): void;
    autoResize?(): void;
    executeCommand?(commandName: CommandName, value?: string | HTMLElement): void;
    serializeValue?(value: string): string;
    sanitizeHtml?(value: string): string;
    enableAutoUrl?: boolean;
    enableXhtml?: boolean;
    enableHtmlSanitizer?: boolean;
    getInsertImgMaxWidth?(): string | number;
    getInsertVidMaxWidth?(): string | number;
    getSelection(): string;
    currentTarget: HTMLElement;
    focusIn(): void;
    showEmojiPicker?(x?: number, y?: number): void;
    addAnchorAriaLabel?(value: string): string;
    autoSaveOnIdle: boolean;
    slashMenuSettings: SlashMenuSettingsModel;
    showDialog(type: DialogType): void;
}
/**

 */
export interface IRenderer {
    linkQTBar?: BaseQuickToolbar;
    imageQTBar?: BaseQuickToolbar;
    audioQTBar?: BaseQuickToolbar;
    videoQTBar?: BaseQuickToolbar;
    tableQTBar?: BaseQuickToolbar;
    textQTBar?: BaseQuickToolbar;
    inlineQTBar?: BaseQuickToolbar;
    renderPanel?(): void;
    setPanel?(panel: Element): void;
    /**
     * Retrieves the parent element of the content editable div.
     * If the editor is in iframe mode, it returns the `iframe` element.
     * Otherwise, it returns the parent element with the class `e-rte-content`.
     *
     * @returns {Element} - The parent element of the content editable div or the `iframe` element.
     */
    getPanel?(): Element;
    /**
     * Retrieves the content editable `div` element of the RichTextEditor.
     * If the editor is in iframe mode, it returns the `body` element of the iframe.
     *
     */
    getEditPanel?(): Element;
    getText?(): string;
    getDocument?(): Document;
    addEventListener?(): void;
    removeEventListener?(): void;
    renderToolbar?(args: IToolbarOptions): void;
    renderPopup?(args: BaseQuickToolbar): void;
    renderDropDownButton?(args: DropDownItemModel): DropDownButton;
    renderColorPicker?(args: IColorPickerModel, item?: string, toobarType?: string): ColorPicker;
    renderColorPickerDropDown?(args?: IColorPickerModel, item?: string, colorPicker?: ColorPicker, defaultColor?: string, toobarType?: string): DropDownButton;
    renderListDropDown?(args: IDropDownModel): DropDownButton;
}
/**
 * Provides information about a notification event in the rich text editor.
 */
export interface NotifyArgs {
    module?: string;
    args?: KeyboardEvent | MouseEvent | ClickEventArgs | ClipboardEvent | TouchEvent;
    cancel?: boolean;
    requestType?: string;
    enable?: boolean;
    properties?: object;
    selection?: NodeSelection;
    selfLink?: Link;
    link?: HTMLInputElement;
    selectNode?: Node[];
    selectParent?: Node[];
    url?: string;
    text?: string;
    isWordPaste?: boolean;
    title?: string;
    target?: string;
    member?: string;
    /** Specifies the name of the notifier handling the event. */
    name?: string;
    /** Represents the range of text selection involved in the notification. */
    range?: Range;
    /** Describes the action associated with the notification event. */
    action?: string;
    callBack?(args?: string | IImageCommandsArgs, cropImageData?: {
        [key: string]: string | boolean | number;
    }[], pasteTableSource?: string): void;
    file?: Blob;
    insertElement?: Element;
    touchData?: ITouchData;
    allowedStylePropertiesArray?: string[];
    isPlainPaste?: boolean;
    formatPainterSettings?: FormatPainterSettingsModel;
    emojiPickerSettings?: EmojiSettingsModel;
    ariaLabel?: string;
    /**
     * Defines the source of the Table content.
     *
     * @private
     */
    pasteTableSource?: string;
}
/**
 * Provides information about the current and previous cssClass property .
 */
export interface ICssClassArgs {
    cssClass?: string;
    oldCssClass?: string;
}
/**

 */
export interface IItemCollectionArgs {
    /** Defines the instance of the current selection */
    selection?: NodeSelection;
    /** Defines the HTML elements of currently selected content */
    selectNode?: Node[];
    /** Defines the parent HTML elements of current selection */
    selectParent?: Node[];
    /** Defines the URL action details for link element */
    url?: string;
    /** Defines the Display Text action details for link element */
    text?: string;
    /** Defines the title of the link action details */
    title?: string;
    /** Defines the target as string for link element */
    target?: string;
    /** Defines the element to be inserted */
    insertElement?: Element;
}
/**
 * Provides information about a TouchData.
 */
export interface ITouchData {
    prevClientX?: number;
    prevClientY?: number;
    clientX?: number;
    clientY?: number;
}
/**
 * @hidden

 */
export interface IFormatPainter {
    /** Stores the previous action. */
    previousAction: string;
    destroy: Function;
}
/**
 * @hidden

 */
export interface IColorPickerModel extends ColorPickerModel {
    element?: HTMLElement;
    value?: string;
    command?: string;
    subCommand?: string;
    target?: string;
    iconCss?: string;
    cssClass?: string;
}
/**
 * @hidden

 */
export interface IColorPickerEventArgs extends ColorPickerEventArgs {
    item?: IColorPickerModel;
    originalEvent: string;
    cancel?: boolean;
}
/**
 * @hidden

 */
export interface IDropDownItem extends ItemModel {
    command?: string;
    subCommand?: string;
    controlParent?: DropDownButton;
    listImage?: string;
    value?: string;
}
/**
 * @hidden

 */
export interface IDropDownClickArgs extends ClickEventArgs {
    item: IDropDownItem;
}
/**

 */
export interface IColorPickerRenderArgs {
    items?: string[];
    containerType?: string;
    container?: HTMLElement;
}
/**

 */
export interface IImageNotifyArgs {
    module?: string;
    args?: KeyboardEvent | MouseEvent | ClickEventArgs | IToolbarItemModel | ClipboardEvent | TouchEvent;
    cancel?: boolean;
    requestType?: string;
    enable?: boolean;
    properties?: object;
    selection?: NodeSelection;
    selfImage?: Image;
    selfAudio?: Audio;
    selfVideo?: Video;
    link?: HTMLInputElement | HTMLElement;
    selectNode?: Node[];
    selectParent?: Node[];
    target?: string;
    alt?: HTMLInputElement | HTMLElement;
    text?: string;
    member?: string;
    name?: string;
    cssClass?: string;
    ariaLabel?: string;
}
/**
 * Represents the details of an image integrated into the Rich Text Editor.
 */
export interface IImageCommandsArgs {
    /** Specifies the `src` attribute of the image. */
    url?: string;
    /** Represents the current selection instance. */
    selection?: NodeSelection;
    /** Specifies the minimum, maximum, and actual width of the image. */
    width?: {
        minWidth?: string | number;
        maxWidth?: string | number;
        width?: string | number;
    };
    /** Specifies the minimum, maximum, and actual height of the image. */
    height?: {
        minHeight?: string | number;
        maxHeight?: string | number;
        height?: string | number;
    };
    /** Describes the alternate text attribute for the image. */
    altText?: string;
    /** Defines the CSS class names to be applied to the image. */
    cssClass?: string;
    /** Refers to the image element that is to be edited. */
    selectParent?: Node[];
}
/**
 * Provides details about an audio element added to the Rich Text Editor.
 */
export interface IAudioCommandsArgs {
    /** Specifies the source URL of the audio. */
    url?: string;
    /** Represents the instance of the current selection within the editor. */
    selection?: NodeSelection;
    /** Specifies the file name of the audio. */
    fileName?: string;
    /** Specifies the CSS class to be applied to the audio element. */
    cssClass?: string;
    /** Represents the selected parent node of the audio element to be edited. */
    selectParent?: Node[];
    /** Specifies the title attribute for the audio element. */
    title?: string;
}
/**
 * Provides details about a video element added to the Rich Text Editor.
 */
export interface IVideoCommandsArgs {
    /** Specifies the source URL of the video. */
    url?: string;
    /** Represents the instance of the current selection within the editor. */
    selection?: NodeSelection;
    /** Defines the minimum, maximum, and current width of the video. */
    width?: {
        minWidth?: string | number;
        maxWidth?: string | number;
        width?: string | number;
    };
    /** Defines the minimum, maximum, and current height of the video. */
    height?: {
        minHeight?: string | number;
        maxHeight?: string | number;
        height?: string | number;
    };
    /** Specifies the file name of the video, which can be a string or a DocumentFragment. */
    fileName?: string | DocumentFragment;
    /** Indicates whether the video link is an embedded URL. */
    isEmbedUrl?: boolean;
    /** Specifies the CSS class to be applied to the video element. */
    cssClass?: string;
    /** Represents the selected parent node of the video element to be edited. */
    selectParent?: Node[];
    /** Specifies the title attribute for the video element. */
    title?: string;
}
/**

 */
export interface ImageDragEvent extends DragEvent {
    rangeParent?: Element;
    rangeOffset?: number;
}
/**
 * Provides information about the image drop event in a rich text editor.
 */
export interface ImageDropEventArgs extends DragEvent {
    /** Determines whether the action should be prevented. */
    cancel: boolean;
    /** Refers to the parent element of the drop range. */
    rangeParent?: Element;
    /** Specifies the offset value for the drop range. */
    rangeOffset?: number;
}
/**
 * Provides details about a link added to the Rich Text Editor.
 */
export interface ILinkCommandsArgs {
    /** Specifies the URL attribute of the link. */
    url?: string;
    /** Represents the instance of the current selection. */
    selection?: NodeSelection;
    /** Indicates the title for the link to be inserted. */
    title?: string;
    /** Specifies the text for the link to be inserted. */
    text?: string;
    /** Indicates the target attribute of the link. */
    target?: string;
    /** Identifies the link element to be edited. */
    selectParent?: Node[];
}
/**
 * Provides details about a table added to the Rich Text Editor.
 */
export interface ITableCommandsArgs {
    /**

     * This argument deprecated. Use `rows` argument.
     */
    row?: number;
    /** Specifies the number of rows to be inserted in the table. */
    rows?: number;
    /** Specifies the number of columns to be inserted in the table. */
    columns?: number;
    /** Defines the minimum width, maximum width, and width of the table. */
    width?: {
        minWidth?: string | number;
        maxWidth?: string | number;
        width?: string | number;
    };
    /** Represents the instance of the current selection. */
    selection?: NodeSelection;
}
/**

 */
export interface IFormatPainterArgs {
    /**
     * Defines the action to be performed.
     * Allowed values are 'format-copy', 'format-paste', 'escape'.
     */
    formatPainterAction: string;
}
export interface IEmojiIcons {
    /** Specifies the description of the emoji icon. */
    desc: string;
    /** Specifies the Unicode representation of the emoji icon. */
    code: string;
}
export interface EmojiIconsSet {
    /** Specifies the name of the category for the Unicode. */
    name: string;
    /** Specifies the Unicode representation of the icon displayed in the emoji picker toolbar item. */
    code: string;
    /** Specifies the CSS class for styling the emoji icon. */
    iconCss?: string;
    /** Specifies the collection of emoji icons. */
    icons: IEmojiIcons[];
}
/**

 */
export interface ITableArgs {
    rows?: number;
    columns?: number;
    width?: {
        minWidth?: string | number;
        maxWidth?: string | number;
        width?: string | number;
    };
    selection?: NodeSelection;
    selectNode?: Node[];
    selectParent?: Node[];
    subCommand?: string;
}
/**

 */
export interface ITableNotifyArgs {
    module?: string;
    args?: ClickEventArgs | MouseEvent | KeyboardEventArgs | TouchEvent;
    selection?: NodeSelection;
    selectNode?: Node[];
    selectParent?: Node[];
    cancel?: boolean;
    requestType?: string;
    enable?: boolean;
    properties?: object;
    self?: Table;
}
/**
 * Provides information about a EditorModel.
 */
export interface IEditorModel {
    currentDocument?: Document;
    execCommand?: Function;
    observer?: Observer;
    markdownSelection?: MarkdownSelection;
    undoRedoManager?: UndoRedoManager | UndoRedoCommands;
    nodeSelection?: NodeSelection;
    mdSelectionFormats?: MDSelectionFormats;
    domNode?: DOMNode;
    nodeCutter?: NodeCutter;
    formatPainterEditor?: IFormatPainterEditor;
    destroy?(): void;
    beforeSlashMenuApplyFormat?(): void;
}
/**
 * Provides information about a ToolbarItems.
 */
export interface IToolbarItems {
    template?: string;
    tooltipText?: string;
    command?: string;
    subCommand?: string;
    undo?: boolean;
    click?: EmitType<ClickEventArgs>;
}
/**
 * @hidden

 */
export interface IToolbarItemModel extends ItemModel {
    command?: string;
    subCommand?: string;
}
/**

 */
export interface IToolbarOptions {
    enableRtl: boolean;
    target: HTMLElement;
    items?: ItemModel[];
    rteToolbarObj: BaseToolbar;
    enablePersistence: boolean;
    overflowMode?: OverflowMode;
    cssClass?: string;
    type?: string;
}
/**

 */
export interface IToolbarSettings {
    enable?: boolean;
    items?: (string | IToolbarItems)[];
    target?: HTMLElement;
    type?: ToolbarType;
}
/**

 */
export interface IToolbarRenderOptions {
    target: HTMLElement;
    items?: (string | IToolbarItems)[];
    mode?: OverflowMode;
    container?: string;
    cssClass?: string;
}
/**

 */
export interface IDropDownModel {
    content?: string;
    items: IDropDownItemModel[];
    iconCss?: string;
    itemName: string;
    cssClass: string;
    element: HTMLElement;
    activeElement?: HTMLElement;
}
/**

 */
export interface IToolsItems {
    id: string;
    icon?: string;
    tooltip?: string;
    command?: string;
    subCommand?: string;
    value?: string;
}
/**
 * Provides information about a ToolbarItemConfig.
 */
export interface IToolsItemConfigs {
    icon?: string;
    tooltip?: string;
    command?: string;
    subCommand?: string;
    value?: string;
}
/**
 * @hidden

 */
export interface IListDropDownModel extends DropDownItemModel {
    cssClass?: string;
    command?: string;
    subCommand?: string;
    value?: string;
    text?: string;
    listStyle?: string;
    listImage?: string;
}
/**
 * @hidden

 */
export interface IDropDownItemModel extends DropDownItemModel {
    cssClass?: string;
    command?: string;
    subCommand?: string;
    value?: string;
    text?: string;
}
/**
 * Provides detailed information about an ActionComplete event.
 */
export interface ActionCompleteEventArgs {
    /** Specifies the type of the current action. */
    requestType?: string;
    /** Specifies the name of the event. */
    name?: string;
    /** Specifies the current mode of the editor. */
    editorMode?: string;
    /**
     * Defines the selected elements.
     *

     */
    elements?: Node[];
    /** Specifies the event associated with the action, such as a mouse or keyboard event. */
    event?: MouseEvent | KeyboardEvent;
    /**
     * Defines the selected range.
     *

     */
    range?: Range;
}
/**
 * Provides detailed information about an actionBegin event.
 */
export interface ActionBeginEventArgs {
    /** Specifies the type of the current action. */
    requestType?: string;
    /** Indicates whether to cancel the current action. */
    cancel?: boolean;
    /**
     * Specifies the current toolbar or dropdown item involved in the action.
     *

     */
    item?: IToolbarItemModel | IDropDownItemModel;
    /** Specifies the event that initiated the action, such as mouse, keyboard, or drag events. */
    originalEvent?: MouseEvent | KeyboardEvent | DragEvent;
    /** Specifies the name of the event. */
    name?: string;
    /** Specifies whether the selection type is a dropdown. */
    selectType?: string;
    /**
     * Provides details about URL actions.
     *

     */
    itemCollection?: IItemCollectionArgs;
    /**
     * Defines the emoji picker details.
     *

     */
    emojiPickerArgs?: IEmojiPickerArgs;
    /**
     * Defines the content to be exported.
     *

     */
    exportValue?: string;
}
export interface IEmojiPickerArgs {
    emojiSettings: EmojiSettingsModel;
}
/**
 * Provides detailed information about a Print event in the Rich Text Editor (RTE).
 */
export interface PrintEventArgs extends ActionBeginEventArgs {
    /** Defines the Rich Text Editor (RTE) element associated with the Print event. */
    element?: Element;
}
/**

 */
export interface IShowPopupArgs {
    args?: MouseEvent | TouchEvent | KeyboardEvent;
    type?: string;
    isNotify: boolean;
    elements?: Element | Element[];
}
/**

 */
export interface IUpdateItemsModel {
    targetItem: string;
    updateItem: string;
    baseToolbar: BaseToolbar;
}
/**

 */
export interface IDropDownRenderArgs {
    items?: string[];
    containerType?: string;
    container?: HTMLElement;
}
/**

 */
export interface IShowQuickTBarOptions {
    x: number;
    y: number;
    target: HTMLElement;
    editTop: number;
    editHeight: number;
    popup: HTMLElement;
    parentElement: HTMLElement;
    tBarElementHeight: number;
    parentData: ClientRect;
    windowY: number;
    windowHeight: number;
    windowWidth: number;
    popWidth: number;
    popHeight: number;
    bodyRightSpace: number;
}
/**

 */
export interface IPositionChanged {
    x: boolean;
    y: boolean;
}
/**

 */
export interface IQuickToolbarOptions {
    popupType: string;
    mode: OverflowMode;
    renderType: RenderType;
    toolbarItems: (string | IToolbarItems)[];
    cssClass: string;
}
/**
 * Provides detailed information about the beforeQuickToolbarOpen event in the editor.
 */
export interface BeforeQuickToolbarOpenArgs {
    /**
     * Defines the instance of the current popup element
     *

     */
    popup?: Popup;
    /** Determine whether the quick toolbar should be prevented from opening. */
    cancel?: boolean;
    /** Defines the target element on which the quick toolbar is triggered. */
    targetElement?: Element;
    /** Defines the X-coordinate position where the quick toolbar will appear. */
    positionX?: number;
    /** Defines the Y-coordinate position where the quick toolbar will appear. */
    positionY?: number;
}
/**
 * Provides detailed information about the AfterImageDeleteEvent event in the editor.
 */
export interface AfterImageDeleteEventArgs {
    /** Defines the image DOM element that was deleted. */
    element: Node;
    /** Defines the 'src' attribute of the deleted image element. */
    src: string;
}
/**
 * Provides detailed information about the AfterMediaDeleteEvent event in the editor.
 */
export interface AfterMediaDeleteEventArgs {
    /** Defines the audio/video DOM element that was deleted. */
    element: Node;
    /** Defines the 'src' attribute of the deleted audio/video element. */
    src: string;
}
/**
 * Provides detailed information about the QuickToolbar event in the editor.
 */
export interface QuickToolbarEventArgs {
    /**
     * Defines the instance of the current popup element
     *

     */
    popup?: Popup;
    /**
     * Returns the HTMLElement associated with the dialog in the quick toolbar.
     */
    element: HTMLElement;
    /**
     * Specify the name identifier of the event within the quick toolbar.
     */
    name?: string;
}
/**

 */
export interface IAdapterProcess {
    text: string;
    range: Range;
    actionName: string;
}
/**
 * Provides information about a Formatter.
 */
export interface IFormatter {
    /** Configure the format tags, mapping tag names to their respective format. */
    formatTags?: {
        [key: string]: string;
    };
    /** Configure the list tags, mapping tag names to their respective list format. */
    listTags?: {
        [key: string]: string;
    };
    /** Configure the key settings with specific shortcut key configurations. */
    keyConfig?: {
        [key: string]: string;
    };
    process?: Function;
    onKeyHandler?: Function;
    editorManager?: IEditorModel;
    /** Retrieves the undo and redo stack arrays for tracking changes. */
    getUndoRedoStack?: Function;
    onSuccess?: Function;
    /** Saves the current state for undo and redo actions within the editor. */
    saveData?: Function;
    disableToolbarItem?(items: string | string[]): void;
    /** Enables the undo functionality to revert changes. */
    enableUndo?: Function;
    setDocument?: Function;
    getDocument?: Function;
    setEditPanel?: Function;
    getEditPanel?: Function;
    updateFormatter?: Function;
    initializePlugin?: Function;
    isAppliedCommand?(e?: MouseEvent): string;
    mdSelectionFormat?: MDSelectionFormats;
    beforeSlashMenuApply(): void;
    getCurrentStackIndex(): number;
}
/**

 */
export interface IHtmlFormatterModel {
    currentDocument?: Document;
    element?: Element;
    keyConfig?: {
        [key: string]: string;
    };
    options?: {
        [key: string]: number;
    };
    formatPainterSettings?: FormatPainterSettingsModel;
}
/**

 */
export interface IMarkdownFormatterModel {
    element?: Element;
    formatTags?: {
        [key: string]: string;
    };
    listTags?: {
        [key: string]: string;
    };
    keyConfig?: {
        [key: string]: string;
    };
    options?: {
        [key: string]: number;
    };
    selectionTags?: {
        [key: string]: string;
    };
}
/**

 */
export interface IFontProperties {
    default?: string;
    items?: IDropDownItemModel[];
    width?: string;
}
/**

 */
export interface IBulletFormatListPropertiesProperties {
    types?: IListDropDownModel[];
}
/**

 */
export interface INumberFormatListPropertiesProperties {
    types?: IListDropDownModel[];
}
/**

 */
export interface IFormatProperties {
    default?: string;
    types?: IDropDownItemModel[];
    width?: string;
}
/**

 */
export interface OffsetPosition {
    left: number;
    top: number;
}
/**
 * Provides information about a Resize event.
 */
export interface ResizeArgs {
    /** Specifies the resize event arguments. */
    event?: MouseEvent | TouchEvent;
    /** Describes the type of request. */
    requestType?: string;
    /** Indicates whether the action should be canceled. */
    cancel?: boolean;
}
/**
 * Provides information about a BeforeSanitizeHtml event.
 */
export interface BeforeSanitizeHtmlArgs {
    /** Indicates whether the current action needs to be prevented. */
    cancel?: boolean;
    /** A callback function executed before the inbuilt action, which should return HTML as a string.
     *
     * @function
     * @param {string} value - The input value.
     * @returns {string} - The HTML string.
     */
    helper?: Function;
    /** Returns the selectors object containing both tags and attribute selectors to block cross-site scripting attacks.
     * It is also possible to modify the block list within this event.
     */
    selectors?: SanitizeSelectors;
}
/**
 * Provides information about SanitizeSelectors.
 */
export interface SanitizeSelectors {
    /** Returns the list of tags. */
    tags?: string[];
    /** Returns the list of attributes to be removed. */
    attributes?: SanitizeRemoveAttrs[];
}
/**
 * Provides information about a ExecuteCommandOption.
 */
export interface ExecuteCommandOption {
    undo?: boolean;
}
/**
 * Provides information about a SanitizeRemoveAttributes.
 */
export interface SanitizeRemoveAttrs {
    /** Defines the attribute name to sanitize. */
    attribute?: string;
    /** Defines the selector that sanitizes the specified attributes within the selector. */
    selector?: string;
}
/**

 */
export interface ISetToolbarStatusArgs {
    args: IToolbarStatus;
    parent: IRichTextEditor;
    tbElements: HTMLElement[];
    tbItems: IToolbarItemModel[];
    dropDownModule: DropDownButtons;
}
/**
 * Provides detailed information about a change event in the RichTextEditor.
 */
export interface ChangeEventArgs {
    /**
     * Returns the current value/content of the RichTextEditor.
     */
    value: string;
    /** Defines the name of the event. */
    name?: string;
    /** Specifies if the request should be saved automatically or triggered by user interaction (focus out). */
    isInteracted: boolean;
}
/**
 * Provides information regarding a DialogOpen event in the RichTextEditor.
 */
export interface DialogOpenEventArgs {
    /**
     * Defines if the current dialog action can be prevented.
     */
    target: HTMLElement | string;
    /**
     * Returns the root container element of the dialog being opened.
     */
    container: HTMLElement;
    /**
     * Returns the element reference of the dialog.
     */
    element: Element;
    /**
     * Name of the event if specified.
     */
    name?: string;
}
/**
 * Provides information related to a DialogClose event in the RichTextEditor.
 */
export interface DialogCloseEventArgs {
    /**
     * Identifies if the current action can be canceled.
     */
    cancel: boolean;
    /**
     * Returns the root container element of the dialog being closed.
     */
    container: HTMLElement;
    /**
     * Provides reference to the dialog element being closed.
     */
    element: Element;
    /**
     * Returns the original event arguments, if any.
     */
    event: Event;
    /**
     * Determines if the dialog close event is triggered by user interaction.
     */
    isInteracted: boolean;
    /**
     * DEPRECATED-Determines whether the event is triggered by interaction.
     */
    isInteraction: boolean;
    /**
     * Specifies the event name, if available.
     */
    name?: String;
    /**
     * Determines if action can be prevented; target details.
     */
    target: HTMLElement | String;
}
/**
 * Provides specific details about a successful Image upload event in the RichTextEditor.
 */
export interface ImageSuccessEventArgs {
    /**
     * Returns the original event arguments.
     */
    e?: object;
    /**
     * Details about the file that was successfully uploaded.
     */
    file: FileInfo;
    /**
     * Provides the status text describing the image upload.
     */
    statusText?: string;
    /**
     * Describes the operation performed during the upload event.
     */
    operation: string;
    /**
     * Returns the response details of the upload event, if any.
     */
    response?: ResponseEventArgs;
    /**
     * Specifies the name of the event.
     */
    name?: string;
    /**
     * Specifies the HTML element related to the event.
     */
    element?: HTMLElement;
    /**
     * Provides the detected image source related to the event.
     */
    detectImageSource?: ImageInputSource;
}
/**
 * Provides detailed information about a failed Image upload event in the RichTextEditor.
 */
export interface ImageFailedEventArgs {
    /**
     * Returns the original event arguments.
     */
    e?: object;
    /**
     * Details about the file that failed to upload.
     */
    file: FileInfo;
    /**
     * Provides status text describing the failed upload.
     */
    statusText?: string;
    /**
     * Describes the operation performed during the failed upload attempt.
     */
    operation: string;
    /**
     * Returns the response details of the failed upload event.
     */
    response?: ResponseEventArgs;
    /**
     * Specifies the event name.
     */
    name?: string;
}
/**
 * Provides information about a response received after an Image upload event in the RichTextEditor.
 */
export interface ResponseEventArgs {
    /**
     * Returns upload image headers information, if available.
     */
    headers?: string;
    /**
     * Returns readyState information of the upload process.
     */
    readyState?: object;
    /**
     * Provides the status code returned for the uploaded image.
     */
    statusCode?: object;
    /**
     * Returns the status text of the uploaded image.
     */
    statusText?: string;
    /**
     * Indicates if the upload was performed with credentials.
     */
    withCredentials?: boolean;
}
/**
 * Provides specific details about a Destroyed event in the RichTextEditor.
 */
export interface DestroyedEventArgs {
    /**
     * Specifies the name of the event.
     */
    name?: string;
    /**
     * Determines if the current action of destruction can be prevented.
     */
    cancel: boolean;
}
/**
 * Provides information regarding content pasted in the RichTextEditor for cleanup operations.
 */
export interface PasteCleanupArgs {
    /**
     * Returns the content data present in the ClipboardEvent arguments.
     */
    value: string;
    /**
     * Returns a list of image file data that was pasted into the editor.
     */
    filesData: FileInfo[];
}
/**
 * Provides specific information about a Blur event in the RichTextEditor.
 */
export interface BlurEventArgs {
    /**
     * Contains the original event arguments related to the blur event.
     */
    event: Event;
    /**
     * Indicates if the blur event was caused by user interaction.
     */
    isInteracted: boolean;
    /**
     * Specifies the name of the blur event.
     */
    name?: string;
}
/**
 * Provides information about a ToolbarClick event in the RichTextEditor.
 */
export interface ToolbarClickEventArgs {
    /**
     * Determines if the current toolbar click action can be canceled.
     */
    cancel: boolean;
    /**
     * Defines the current Toolbar Item Object being clicked.
     */
    item: ItemModel;
    /**
     * Contains the original mouse event arguments related to the toolbar click.
     */
    originalEvent: MouseEvent;
    /**
     * Specifies the request type associated with the toolbar click event.
     */
    requestType: string;
    /**
     * Specifies the name of the event.
     */
    name?: string;
}
/**
 * Provides details about a Focus event in the RichTextEditor.
 */
export interface FocusEventArgs {
    /**
     * Contains the original event arguments associated with the focus event.
     */
    event: FocusEvent;
    /**
     * Indicates if the focus event was triggered by user interaction.
     */
    isInteracted: boolean;
    /**
     * Specifies the name of the focus event.
     */
    name?: string;
}
/**
 * Defines types to be used as colorMode for color selection in the RichTextEditor.
 */
export declare type ColorModeType = 'Picker' | 'Palette';
/**

 */
export interface IColorProperties {
    default?: string;
    mode?: ColorModeType;
    columns?: number;
    colorCode?: {
        [key: string]: string[];
    };
    modeSwitcher?: boolean;
}
/**

 */
export interface IExecutionGroup {
    command: string;
    subCommand?: string;
    value?: string;
}
/**
 * Provides detailed information about an image uploading event.
 */
export interface ImageUploadingEventArgs {
    /**
     * Defines whether the current image upload action can be prevented.
     */
    cancel: boolean;
    /**
     * Defines the additional data in a key and value pair format that will be submitted with the upload action.
     */
    customFormData: {
        [key: string]: Object;
    }[];
    /**
     * Returns the XMLHttpRequest instance that is associated with the current upload action.
     */
    currentRequest?: {
        [key: string]: string;
    }[];
    /**
     * Returns the list of files that are scheduled to be uploaded.
     */
    filesData: FileInfo[];
}
/**
 * @hidden

 */
export declare const executeGroup: {
    [key: string]: IExecutionGroup;
};
/**
 * Defines types to be used as CommandName.
 *
 * The `CommandName` type encompasses various commands that can be applied within the rich text editor.
 * Each command represents a specific formatting or editing action, such as applying text styles,
 * inserting multimedia content, and handling text alignment or structure.
 *
 */
export declare type CommandName = 'bold' | 'italic' | 'underline' | 'strikeThrough' | 'superscript' | 'subscript' | 'uppercase' | 'lowercase' | 'fontColor' | 'fontName' | 'fontSize' | 'backColor' | 'justifyCenter' | 'justifyFull' | 'justifyLeft' | 'justifyRight' | 'undo' | 'createLink' | 'formatBlock' | 'heading' | 'indent' | 'insertHTML' | 'insertOrderedList' | 'insertUnorderedList' | 'insertParagraph' | 'outdent' | 'redo' | 'removeFormat' | 'insertText' | 'insertImage' | 'insertAudio' | 'insertVideo' | 'insertHorizontalRule' | 'insertBrOnReturn' | 'insertCode' | 'insertTable' | 'editImage' | 'editLink' | 'applyFormatPainter' | 'copyFormatPainter' | 'escapeFormatPainter' | 'emojiPicker' | 'InlineCode' | 'importWord';
/**
 * @hidden

 */
export interface StatusArgs {
    html: Object;
    markdown: Object;
}
/**
 * Provides detailed information about the updatedToolbarStatus event in the Rich Text Editor.
 */
export interface ToolbarStatusEventArgs {
    /** Defines the name of the event. */
    name?: string;
    /** Defines the undo state argument, indicating whether an undo action can be performed. */
    undo: boolean;
    /** Defines the redo state argument, indicating whether a redo action can be performed. */
    redo: boolean;
    /** Defines the HTML toolbar status arguments, providing the current status of the HTML toolbar. */
    html?: object;
    /** Defines the markdown toolbar status arguments, providing the current status of the Markdown toolbar. */
    markdown?: object;
}
/**
 * @hidden

 */
export interface CleanupResizeElemArgs {
    name?: string;
    value: string;
    callBack(value: string): void;
}
/**
 * @hidden
 * @private
 */
export interface IBaseQuickToolbar {
    /**
     * Instance of the Quick Toolabr Popup.
     */
    popupObj: Popup;
    /**
     * Parent Element of the Quick Toolbar.
     */
    element: HTMLElement;
    /**
     * Boolean to check whether the quick toolbar is rendered in the DOM.
     */
    isRendered: boolean;
    /**
     * Instance of the Toolbar rendered inside the Popup.
     */
    quickTBarObj: BaseToolbar;
    /**
     * Element of the Toolbar rendered inside the Popup.
     */
    toolbarElement: HTMLElement;
}
/**
 * @hidden
 * @private
 */
export interface MetaTag {
    /**
     * The name attribute of the meta tag.
     */
    name?: string;
    /**
     * The content attribute of the meta tag.
     */
    content?: string;
    /**
     * The charset attribute of the meta tag.
     */
    charset?: string;
    /**
     * The http-equiv attribute of the meta tag.
     */
    httpEquiv?: string;
    /**
     * The property attribute of the meta tag.
     */
    property?: string;
}
/**
 * Specifies the custom slash menu item configuration.
 *
 */
export interface ISlashMenuItem {
    /**
     * Specifies the text to be displayed in the slash menu item.
     */
    text: string;
    /**
     * Specifies the command to be executed when the slash menu item is clicked.
     */
    command: string;
    /**
     * Specifies the icon class to be added in the slash menu item for visual representation.
     */
    iconCss: string;
    /**
     * Specifies the description to be displayed in the slash menu item.
     */
    description?: string;
    /**
     * Specifies the type of the slash menu item. Grouping will be done based on the type.
     */
    type: string;
}
/**
 * Provides detailed information about a SlashMenuItemSelect event.
 */
export interface SlashMenuItemSelectArgs {
    /**
     * If the event is triggered by user interaction, it returns true. Otherwise, it returns false.
     */
    isInteracted: boolean;
    /**
     * Returns the selected list item of the slash menu list as an HTMLLIElement.
     */
    item: HTMLLIElement;
    /**
     * Returns the selected slash menu item data corresponding to the interface.
     */
    itemData: ISlashMenuItem;
    /**
     * Specifies the original event arguments such as MouseEvent, KeyboardEvent, or TouchEvent.
     */
    originalEvent: MouseEvent | KeyboardEvent | TouchEvent;
    /**
     * Specifies the boolean value to cancel the default action if set to true.
     */
    cancel?: boolean;
}
