import { Node, Ancestor, Editor as SlateEditor, Range, BaseText } from 'slate';
export declare type JsonNode = (Ancestor | Node) & {
    attrs?: INodeAttrs;
    [key: string]: any;
};
export declare interface INodeAttrs {
    type: string;
    style: object;
    "redactor-attributes": object;
    [key: string]: unknown;
}
export interface Editor extends SlateEditor {
    savedSelection?: Range | null;
}
export declare type TScrteShortcutKey = string | {
    win: string;
    mac: string;
};
export declare interface IDropdownShortcutElementProps {
    shortcut: TScrteShortcutKey;
}
export declare interface IScrteShortcut {
    key: TScrteShortcutKey;
    callback?: (event: any, editor: any, format: any, registryObj: any) => {};
    isDisable?: (event: any, editor: any, format: any, registryObj: any) => boolean;
    byKey: boolean;
}
export declare interface IDiscussionDTO {
    "uid": string;
    "locale": string;
    "status": 1 | 2;
    "field": IDiscussionFieldDTO;
    "unread": Boolean;
}
export declare interface IDiscussionFieldDTO {
    "uid": string;
    "path": string;
    "type": string;
    "doc_uid": string;
    "block_uid": string;
    "og_path"?: string;
    "serial_number"?: number;
}
export declare interface IMessageDTO {
    "discussion_uid": string;
    "uid": string;
    "to_users"?: Array<string>;
    "to_roles"?: Array<string>;
    "message": string;
    "entry_uid": string;
    "locale": string;
    "created_at": string;
    "created_by": string;
}
export declare interface IDiscussionCreateOrUpdateResponse {
    discussion: IDiscussionDTO;
    notice: string;
}
export declare interface IMessageCreateOrUpdateResponse {
    conversation: IMessageDTO;
    notice: string;
}
export declare type ICreateNewDiscussionCallback = (res: IDiscussionCreateOrUpdateResponse) => void;
export declare interface IEntryMetadata {
    entryUid: string;
    contentTypeUid: string;
    locale: string;
}
export declare interface IFieldMetadata {
    "data_type": "json";
    "display_name": string;
    "uid": string;
    "field_metadata": {
        "allow_json_rte": true;
    };
    "reference_to": Array<string>;
    "multiple": boolean;
    "_metadata": {
        "uid"?: string;
        "path": string;
    };
}
export declare interface IUserDTO {
    "display"?: string;
    "uid": string;
    "first_name": string;
    "last_name": string;
    "active": boolean;
    "email": string;
    "username": string;
}
export declare interface IUserState {
    mentionsList: Array<IMentionList>;
    userMap: IUserMap;
    roleMap: IRoleMap;
    currentUser: IUserDTO;
}
export declare interface ICommentState {
    message: string;
    to_users: Array<IMentionItem>;
    to_roles: Array<IMentionItem>;
}
export declare type IMentionItem = {
    id: string;
    display: string;
};
export declare type IUserMap = {
    [key: string]: IUserDTO;
};
export declare type IRoleMap = {
    [key: string]: IRoleDTO;
};
export declare interface IMentionList {
    display: string;
    id: string;
    uid: string;
    email?: string;
    first_name?: string;
    last_name?: string;
    username?: string;
}
export declare interface IRoleDTO {
    "uid": string;
    "name": string;
}
export declare interface IStackMetadata {
    users: Array<IUserDTO>;
    roles: Array<IRoleDTO>;
    currentUser: IUserDTO;
}
export declare interface IEditorRequestProps {
    assetUrl: string;
    isPlugin: boolean;
    apiKey: string;
    branch: string;
    isFullScreen: boolean;
}
export declare interface ICommentsProp {
    enabled: true;
}
export declare interface IElement {
    type: string;
    attrs: object;
    uid: string;
    children: Array<IElement | BaseText>;
}
export declare interface IDiscussionProps {
    comments: ICommentsProp;
    discussions: {
        [key: string]: IDiscussionDTO;
    };
    setActiveDiscussion: Function;
}
export declare interface IDiscussionContext {
    entryMetadata: IEntryMetadata;
    editorMetadata: IEditorRequestProps;
    stackMetadata: IStackMetadata;
    fieldMetadata: IFieldMetadata;
    docUID: string;
    newDiscussion: boolean;
    blockUID: string;
    discussionUID: string;
    editComment: string;
    commentCount: number;
    error: {
        hasError: boolean;
        message: string;
    };
    setDiscussions: Function;
    userState: IUserState;
    setDiscussionState: Function;
    setActiveDiscussion: Function;
    setFetchingState: Function;
    setError: Function;
}
export interface IHoveringToolbarContext {
    discussions: {
        [key: string]: IDiscussionDTO;
    };
    setActiveDiscussion: Function;
    commentsEnabled: boolean;
}
export declare interface ICommentRequestBody {
    "discussion_uid": string;
    "message": string;
    "to_users": Array<string>;
    "to_roles": Array<string>;
}
export declare type IMentionedList = Array<IMentionItem>;
