import React, { FC } from 'react';
import { BaseEditor, EditorInterface, ElementInterface, Transforms, Range } from 'slate';
import { ReactEditor, Editable, withReact } from 'slate-react';
import { HistoryEditor } from 'slate-history';
import { ValueOf } from '../types';
export type TextEditorEngine = BaseEditor & ReactEditor & HistoryEditor & EditorInterface;
export declare const MARK_TYPES: {
    readonly BOLD: "bold";
    readonly ITALIC: "italic";
    readonly UNDERLINE: "underline";
    readonly SUPERSCRIPT: "superscript";
};
export type MarkType = ValueOf<typeof MARK_TYPES>;
export declare enum INLINE_EDITOR_TYPES {
    BASIC = "BASIC",
    FLEX = "FLEX"
}
export declare const BLOCK_TYPES: {
    readonly HEADLINE_LARGE: "heading-large";
    readonly HEADLINE_MEDIUM: "heading-medium";
    readonly HEADLINE_SMALL: "heading-small";
    readonly REGULAR_TEXT: "regular-text";
    readonly BULLETED_LIST: "bulleted-list";
    readonly NUMBERED_LIST: "numbered-list";
    readonly LIST_ITEM: "list-item";
    readonly LINK: "link";
    readonly CODE: "code";
};
export type BlockType = ValueOf<typeof BLOCK_TYPES>;
export declare const TEXT_EDITOR_TOOLS: {
    readonly TYPE_FACES: "type-faces";
    readonly BOLD_STYLE: "bold-style";
    readonly ITALIC_STYLE: "italic-style";
    readonly UNDERLINE_STYLE: "underline-style";
    readonly SUPERSCRIPT_STYLE: "superscript-style";
    readonly LINKS: "links";
    readonly LISTS: "lists";
    readonly CODE: "code";
    readonly CLEAR_FORMATTING: "clear-formatting";
};
export type TextEditorTool = ValueOf<typeof TEXT_EDITOR_TOOLS>;
export interface TextEditorValueChild {
    text?: string;
    url?: string;
    [MARK_TYPES.BOLD]?: boolean;
    [MARK_TYPES.ITALIC]?: boolean;
    [MARK_TYPES.UNDERLINE]?: boolean;
    [MARK_TYPES.SUPERSCRIPT]?: boolean;
    children?: TextEditorValueChild[];
    type?: BlockType;
}
export interface TextEditorValue {
    type: BlockType;
    children?: TextEditorValueChild[];
}
export interface Slate {
    Editor: TextEditorEngine;
    Element: ElementInterface;
    Transforms: typeof Transforms;
    Range: typeof Range;
    createEditor: any;
}
export type SlateComponent = {
    editor: TextEditorEngine;
    initialValue?: TextEditorValue[] | null;
    onChange?: (newValue: TextEditorValue[]) => void;
    onBlur?: () => void;
    children: React.ReactNode | React.ReactNode[];
};
export interface SlateReact {
    ReactEditor: typeof ReactEditor;
    useSlate: () => TextEditorEngine;
    Editable: typeof Editable;
    Slate: FC<SlateComponent>;
    withReact: typeof withReact;
}
export declare const TEXT_EDITOR_DEFAULT_VALUE: TextEditorValue[];
export declare const TEXT_EDITOR_DEFAULT_TOOLS: TextEditorTool[];
export interface TextEditorToolbarLabels {
    tooltipTextBold: string;
    tooltipTextItalic: string;
    tooltipTextUnderline: string;
    tooltipTextSuperscript: string;
    tooltipTextLink: string;
    tooltipTextRemoveLink: string;
    tooltipTextBulletedList: string;
    tooltipTextNumberedList: string;
    tooltipTextClearFormatting: string;
    tooltipTextCode: string;
    urlIsRequiredMessage: string;
    enterValidUrlMessage: string;
    saveButtonText: string;
    headingLargeText: string;
    headingMediumText: string;
    headingSmallText: string;
    regularText: string;
    validationErrorWarningMessage: string;
    linkInputLabelText: string;
}
export declare enum TOOLBAR_POSITION {
    TOP = "top",
    BOTTOM = "bottom"
}
export declare const HEADER_HEIGHT = 70;
export declare const HEADER_TITLE_MAX_LENGTH = 50;
export type TextType = {
    key: BlockType;
    privateKey: BlockType;
    title: string;
    className: string;
    testId: string;
};
