import { CommentAction, HyperlinkType, ServerActionType, RevisionType, RevisionActionType, ContentControlType, PasteType } from './types';
import { DocumentEditor } from '../document-editor';
import { DocumentEditorContainer } from '../../document-editor-container';
import { Operation, Revision } from '../implementation';
import { FieldSettingsModel } from '@syncfusion/ej2-dropdowns';
/**
 * ServiceFailureArgs
 */
export interface ServiceFailureArgs {
    /** Status code of the service failure. */
    status: string;
    /** Status text of the service failure. */
    statusText: string;
    /** Service failed URL. */
    url: string;
}
/**
 * @private
 */
export interface AutoResizeEventArgs {
    /**
     * Element to resize
     */
    element?: HTMLElement;
    /**
     * Specifies whether event is canceled or not.
     */
    cancel?: boolean;
}
/**
 * This event arguments provides the necessary information about form field fill event.
 */
export interface FormFieldFillEventArgs {
    /**
     * Specifies form field name.
     */
    fieldName?: string;
    /**
     * Specifies form field value.
     */
    value?: string | boolean | number;
    /**
     * Specifies whether form fill action is canceled or not.
     */
    isCanceled?: boolean;
}
/**
 * This event arguments provides the necessary information about content control fill event.
 */
export interface ContentControlFillEventArgs {
    /**
     * Specifies content control name.
     */
    contentName?: string;
    /**
     * Specifies content control value.
     */
    value?: string | boolean | number;
    /**
     * Specifies whether content control action is canceled or not.
     */
    isCanceled?: boolean;
}
/**
 * Specified form field data
 */
export interface FormFieldData {
    /**
     * Specifies form field name.
     */
    fieldName: string;
    /**
     * Specifies form field data.
     */
    value: string | boolean | number;
}
/**
 * Represents the properties of a comment.
 */
export interface CommentProperties {
    /**
     * Specifies the author of the comment.
     */
    author?: string;
    /**
     * Indicates whether the comment is resolved. The default value is false.
     */
    isResolved?: boolean;
    /**
     * Specifies the date and time of the comment.
     */
    dateTime: Date;
}
/**
 * Represents a comment information.
 */
export interface CommentInfo {
    /**
     * Specifies the text of the comment.
     */
    text: string;
    /**
     * Specifies the replies to the comment.
     */
    replies?: Comment[];
    /**
     * Specifies the unique identifier of the comment.
     */
    id: string;
    /**
     * Specifies the properties of the comment (author, isResolved, dateTime).
     */
    commentProperties: CommentProperties;
}
/**
 * Represents a comment.
 */
export declare class Comment {
    /**
     * Specifies the text of the comment.
     */
    text: string;
    /**
     * Specifies the replies to the comment.
     */
    replies?: Comment[];
    /**
     * Specifies the unique identifier of the comment.
     */
    id: string;
    /**
     * Specifies the properties of the comment (author, isResolved, dateTime).
     */
    commentProperties: CommentProperties;
    constructor(id: string, commentProperties: CommentProperties, text: string);
}
/**
 * Represents the data for a content control element.
 */
export interface ContentControlInfo {
    /**
     * Specifies the title of the content control.
     */
    title: string;
    /**
     * Specifies the tag associated with the content control.
     */
    tag: string;
    /**
     * Specifies the value of the content control.
     */
    value: string;
    /**
     * Specifies whether the content control can be deleted.
     */
    canDelete: boolean;
    /**
     * Specifies whether the content control can be edited.
     */
    canEdit: boolean;
    /**
     * Specifies items for the content control, applicable if the type is combobox or dropdownlist.
     */
    items?: string[];
    /**
     * Specifies the type of content control.
     */
    type: ContentControlType;
    /**
     * Specifies the XML string used for data binding.
     * This string represents the XML content to be mapped within the content control.
     */
    xmlString?: string;
    /**
     * Specifies the XPath expression for XML mapping.
     * This path identifies the specific part of the XML data to bind to the content control.
     */
    xmlPath?: string;
}
/**
 * This event arguments provides the necessary information about documentChange event.
 */
export interface DocumentChangeEventArgs {
    /**
     * Specifies the source DocumentEditor instance which triggers this documentChange event.
     *

     */
    source: DocumentEditor;
}
/**
 * This event arguments provides the necessary information about viewChange event.
 */
export interface ViewChangeEventArgs {
    /**
     * Specifies the page number that starts in the view port.
     */
    startPage: number;
    /**
     * Specifies the page number that ends in the view port.
     */
    endPage: number;
    /**
     * Specifies the source DocumentEditor instance which triggers this viewChange event.
     *

     */
    source: DocumentEditor;
}
/**
 * This event arguments provides the necessary information about zoomFactorChange event.
 */
export interface ZoomFactorChangeEventArgs {
    /**
     * Specifies the source DocumentEditor instance which triggers this zoomFactorChange event.
     *

     */
    source: DocumentEditor;
}
/**
 * This event arguments provides the necessary information about selectionChange event.
 */
export interface SelectionChangeEventArgs {
    /**
     * Specifies the source DocumentEditor instance which triggers this selectionChange event.
     *

     */
    source: DocumentEditor;
    /**
     * Indicates whether the selection has been completed or not.
     */
    isCompleted: boolean;
}
/**
 * This event arguments provides the necessary information about requestNavigate event.
 */
export interface RequestNavigateEventArgs {
    /**
     * Specifies the navigation link.
     */
    navigationLink: string;
    /**
     * Specifies the link type.
     */
    linkType: HyperlinkType;
    /**
     * Specifies the local reference if any.
     */
    localReference: string;
    /**
     * Specifies whether the event is handled or not.
     */
    isHandled: boolean;
    /**
     * Specifies the source DocumentEditor instance which triggers this requestNavigate event.
     *

     */
    source: DocumentEditor;
}
/**
 * This event arguments provides the necessary information about contentChange event.
 */
export interface ContentChangeEventArgs {
    /**
     * Specifies the source DocumentEditor instance which triggers this contentChange event.
     *

     */
    source: DocumentEditor;
    /**
     * Provide necessary information about operations performed in DocumentEditor.
     * @private
     */
    operations?: Operation[];
}
/**
 * This event arguments provides the necessary information about key down event.
 */
export interface DocumentEditorKeyDownEventArgs {
    /**
     * Key down event argument
     */
    event: KeyboardEvent;
    /**
     * Specifies whether the event is handled or not
     */
    isHandled: boolean;
    /**
     * Specifies the source DocumentEditor instance which triggers this key down event.
     *

     */
    source: DocumentEditor;
}
/**
 * This event arguments provides the necessary information about searchResultsChange event.
 */
export interface SearchResultsChangeEventArgs {
    /**
     * Specifies the source DocumentEditor instance which triggers this searchResultsChange event.
     *

     */
    source: DocumentEditor;
}
/**
 * This event arguments provides the necessary information about customContentMenu event.
 */
export interface CustomContentMenuEventArgs {
    /**
     * Specifies the id of selected custom context menu item.
     */
    id: string;
}
/**
 * This event arguments provides the necessary information about BeforeOpenCloseCustomContentMenu event.
 */
export interface BeforeOpenCloseCustomContentMenuEventArgs {
    /**
     * Specifies the array of added custom context menu item ids.
     */
    ids: string[];
}
/**
 * This event args provides the necessary information about comment delete.
 */
export interface CommentDeleteEventArgs {
    /**
     * Comment author.
     */
    author: string;
    /**
     * Specifies whether the event is canceled or not.
     */
    cancel: boolean;
}
/**
 * This event args provides the necessary information about the revision action.
 */
export interface RevisionActionEventArgs {
    /**
     * Specifies the author of the revision.
     */
    author: string;
    /**
     * Specifies whether the action is canceled or not.
     */
    cancel: boolean;
    /**
     * Specifies the revision type.
     */
    revisionType: RevisionType;
    /**
     * Specifies the current action type.
     */
    actionType: RevisionActionType;
    /**
     * Provide the instance of the current revision being accepted or rejected.
     */
    source: Revision;
}
/**
 * This event args provides the necessary information about comment actions.
 */
export interface CommentActionEventArgs {
    /**
     * Comment author.
     */
    author: string;
    /**
     * Specifies whether the event is canceled or not.
     */
    cancel: boolean;
    /**
     * Specifies the comment action type.
     */
    type: CommentAction;
    /**
     * Specifies the commented text.
     */
    text?: string;
    /**
     * Specifies the mentions.
     */
    mentions?: FieldSettingsModel[];
}
export interface BeforeFileOpenArgs {
    /**
     * The size of opened file in bytes.
     */
    fileSize: number;
    /**
     * Specifies file open is canceled.
     */
    isCanceled?: boolean;
}
/**
 * This event args provides the necessary information about track change.
 */
export interface TrackChangeEventArgs {
    /**
     * Specifies whether the track changes enabled or not.
     */
    isTrackChangesEnabled: boolean;
}
/**
 * This event arguments provides the necessary information about onBeforePane switch.
 */
export interface BeforePaneSwitchEventArgs {
    /**
     * Specifies current pane type.
     */
    type: string;
}
/**
 * This event arguments provides the necessary information about DocumentEditorContainer's contentChange event.
 */
export interface ContainerContentChangeEventArgs {
    /**
     * Specifies the source DocumentEditorContainer instance which triggers this contentChange event.
     *

     */
    source: DocumentEditorContainer;
    /**
     * Provide necessary information about operations performed in DocumentEditor.
     * @private
     */
    operations?: Operation[];
}
/**
 * This event arguments provides the necessary information about DocumentEditorContainer's selectionChange event.
 */
export interface ContainerSelectionChangeEventArgs {
    /**
     * Specifies the source DocumentEditorContainer instance which triggers this selectionChange event.
     *

     */
    source: DocumentEditorContainer;
    /**
     * Indicates whether the selection has been completed or not.
     */
    isCompleted: boolean;
}
/**
 * This event arguments provides the necessary information about DocumentEditorContainer's documentChange event.
 */
export interface ContainerDocumentChangeEventArgs {
    /**
     * Specifies the source DocumentEditorContainer instance which triggers this documentChange event.
     *

     */
    source: DocumentEditorContainer;
}
/**
 * Defines customized toolbar items.
 */
export interface CustomToolbarItemModel {
    /**
     * Defines single/multiple classes separated by space used to specify an icon for the button.
     * The icon will be positioned before the text content if text is available, otherwise the icon alone will be rendered.
     *
     * @default ""
     */
    prefixIcon?: string;
    /**
     * Specifies the text to be displayed on the Toolbar button.
     *
     * @default ""
     */
    tooltipText?: string;
    /**
     * Specifies the unique ID to be used with button or input element of Toolbar items.
     *
     * @default ""
     */
    id?: string;
    /**
     * Specifies the text to be displayed on the Toolbar button.
     *
     * @default ""
     */
    text?: string;
    /**
     * Defines single/multiple classes (separated by space) to be used for customization of commands.
     *
     * @default ""
     */
    cssClass?: string;
}
/**
 * Defines the XMLHttpRequest customization properties
 */
export interface XmlHttpRequestEventArgs {
    /**
     * Gets the type of server action that is to be triggered.
     *
     * @default undefined
     * @returns {ServerActionType}
     */
    serverActionType: ServerActionType;
    /**
     * Gets or sets a value indicating whether to enable or disable withCredentials property of XMLHttpRequest object.
     *
     * @default false
     * @returns {boolean}
     */
    withCredentials: boolean;
    /**
     * Gets or sets the collection of custom headers to set in the XMLHttpRequest object.
     *
     * @default undefined
     * @returns {object[]}
     */
    headers: object[];
    /**
     * Gets or sets the timeout to set in the XMLHttpRequest object. It denotes number of milliseconds a request can take before automatically being terminated. The default value is 0, which means there is no timeout.
     *
     * @default 0
     * @returns {number}
     */
    timeout: number;
    /**
     * Gets or sets a value indicating whether this server request has been canceled.
     *
     * @default false
     * @returns {boolean}
     */
    cancel: boolean;
    /**
     * Gets the clipboard data which is to be converted as SFDT in the server-side.
     *
     * @default undefined
     * @returns {object}
     */
    clipboardData?: object;
}
/**
 * This event args provides the necessary information about document load failed event.
 */
export interface DocumentLoadFailedEventArgs {
    /**
     * Specifies the reason for the document load failure.
     */
    status?: string;
    /**
     * Specifies whether to hide the pop-up that appears when opening fails.
     */
    hideOpenFailedPopup?: boolean;
}
/**
 * Defines the Before paste event args.
 */
export interface BeforePasteEventArgs {
    /**
     * Gets or sets a value indicating whether to cancel the paste operation.
     * Set to true to prevent the default paste behavior.
     * @default false
     * @returns {boolean}
     */
    cancel: boolean;
    /**
     * Gets or sets the content to be pasted.
     * This can be modified before pasting into the document.
     * For text paste type, you will get the text content; otherwise, you will get sfdt content.
     */
    pasteContent: string;
    /**
     * Gets or sets the format type of the content being pasted.
     */
    pasteType: PasteType;
}
